Python多线程多进程问题

新手求问,刚学习python,发现在两个线程或两个进程开启后(都有一个while循环),必须要第一个执行完成,第二个才会执行,求问为什么会这样

 import threading
import time

class Test:
    def run(self):
        threading.Thread(target=self.func1()).start()
        threading.Thread(target=self.func2()).start()

    def func1(self):
        count = 0
        while count < 3:
            print("thread1")
            count += 1
            time.sleep(2)

    def func2(self):
        count = 0
        while count < 3:
            print("thread2")
            count += 1
            time.sleep(1)


if __name__ == "__main__":
    Test().run()
 import multiprocessing
import time

class Test:
    def run(self):
        multiprocessing.Process(target=self.func1()).start()
        multiprocessing.Process(target=self.func2()).start()

    def func1(self):
        count = 0
        while count < 3:
            print("thread1")
            count += 1
            time.sleep(2)

    def func2(self):
        count = 0
        while count < 3:
            print("thread2")
            count += 1
            time.sleep(1)


if __name__ == "__main__":
    Test().run()

执行结果:

 thread1
thread1
thread1
thread2
thread2
thread2
0

6个回答

你在函数传参时后面加了小括号就成函数调用了不是把函数当做参数传参
正确的代码:
import threading
import time

class Test:
def run(self):
threading.Thread(target=self.func1).start()
threading.Thread(target=self.func2).start()

def func1(self):
    count = 0
    while count < 3:
        print("thread1")
        count += 1
        time.sleep(2)

def func2(self):
    count = 0
    while count < 3:
        print("thread2")
        count += 1
        time.sleep(1)

if name == "__main__":
Test().run()

import multiprocessing
import time

class Test:
def run(self):
multiprocessing.Process(target=self.func1).start()
multiprocessing.Process(target=self.func2).start()

def func1(self):
    count = 0
    while count < 3:
        print("thread1")
        count += 1
        time.sleep(2)

def func2(self):
    count = 0
    while count < 3:
        print("thread2")
        count += 1
        time.sleep(1)

if name == "__main__":
Test().run()

0

你打码写错了
def run(self):
multiprocessing.Process(target=self.func1()).start()
multiprocessing.Process(target=self.func2()).start()
multiprocessing.Process里面的target参数要求的是你要传入一个函数而你传入的是一个函数的返回值 而你这两个函数没有返回值所以默认为None所以你的多进程是没有启动的

1

你启动的是进程,而且是阻塞的方式 而不是异步的方式。

0
czw913
czw913 请问怎么设置成非阻塞方式
一年多之前 回复

开启异步线程执行,也许会好些

0

def run(self):
threading.Thread(target=self.func1()).start()
threading.Thread(target=self.func2()).start()

这个地方写错了,threading.Thread() 中 target 接受的是函数名,
你写的 target=self.func1() 实际上是先求的 self.func1() 这个函数的值,
所以你看到了 thread1、thread1、thread1 的输出,
而你的函数 self.func1() 没有返回值,所以你这相当于创建了 threading.Thread(target=None).start() 这样一个线程,这个线程未被执行。
第二个线程和第一个一样,都是执行了你的函数,创建了一个空线程。

0

threading.Thread(target=self.func1()).start()
threading.Thread(target=self.func2()).start()
这两行中func1()和func2()的()去掉即可,target传入的参数要的是函数名而不是函数调用,即改成:
threading.Thread(target=self.func1).start()
threading.Thread(target=self.func2).start()

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
python学习笔记
python多线程多进程基础笔记以及涉及其他的python基础知识
python 多线程多进程
1. 之前写过一篇《通过实例认识Python的GIL》的文章,感觉有些意犹未尽  2. 这次对例子作了些扩展,进一步的分析GIL对Python程序的影响 2.1 先来看例子: [python] view plaincopy from threading import Thread    from threading import Event as TEvent    f
Python与多线程多进程
多线程与多进程多线程与多进程优劣比较Python与多线程多进程CPU和IO密集型举例判断方法:多线程多进程 多线程与多进程优劣比较 Python与多线程多进程 CPU和IO密集型 举例 https://www.cnblogs.com/zhangyubao/p/7003535.html CPU密集型代码:各种循环处理、计数等等 IO密集型代码:文件处理、网络爬虫等 判断方法: 直接看CPU占用率...
python多进程爬虫
import re import time from multiprocessing import Pool import requests headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:61.0) Gecko/20100101 Firefox/61.0' } def re_scraper(url)...
python多线程和多进程总结
 python多线程: 多线程的理解:多进程和多线程都可以执行多个任务,线程是进程的一部分。线程的特点是线程之间可以共享内存和变量,资源消耗少(不过再Unix环境中,多进程和多线程资源调度消耗差距不明显,Unix调度较快),缺点是线程之间的同步和加锁比较麻烦。           线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序...
python深度解析之多线程多进程协程
python深度解析之多线程多进程协程,文章对多进程的协程做了原理介绍和代码的实例说明,能很快明白其中的用法,很不错,推荐给大家
Python爬虫笔记(二)——多线程爬虫、正则表达式、多进程爬虫
正则表达式 首先先简单介绍一下正则表达式(关于正则表达式的原理以及算法,等以后有时间在写) python中常使用以下函数来返回正则表达式匹配的项目(使用前先import re): //pattern为正则表达式,string为待匹配的字符串,返回的是列表 findall(pattern,string,flags=0) 爬虫中常用的正则表达式: . 表示任意字符   ^表示匹配行...
python多线程 多进程
多进程与多线程 我们都知道,操作系统中所有的程序都是以进程的方式来运行的,或者说我们把运行着的程序称为进程(Process)。例如运行记事本程序就是启动一个记事本进程,运行两个记事本就是启动两个记事本进程。 很多时候,进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”
python多线程、多进程
最近在项目中有一个需求是没五分钟爬虫抓取一批网上数据,然后实时的将数据更新到mysql和redis中存储,在存储数据时,需要对数据做一些标准化的操作,甚至还需要根据历史数据对新数据某些缺失字段进行融合操作,往往在数据量比较大时,会出现五分钟内无法处理完parser产生的数据,导致数据的堆积。 数据处理逻辑中,其实是可以根据某些特性将全量数据划分为独立的规模较小的数据子集合,每个子集互相独立,可独
Python多线程、多进程和协程的实例讲解
线程、进程和协程是什么 线程、进程和协程的详细概念解释和原理剖析不是本文的重点,本文重点讲述在Python中怎样实际使用这三种东西 参考: 进程、线程、协程之概念理解 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单...
python多线程与协程一些面试题总结
[协程] 什么是协程 协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是协程,协程是一种用户态的轻量级线程。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切换回来的时候,恢复先前保存的寄存器上下文和栈。因此,协程能保留上一次调用的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法,进入上一次离开时所处...
多线程多进程问题
一、简介              我们将一个正在运行的程序称为进程。每个进程都有它自己的系统状态,包含内存状态、打开文件列表、追踪指令执行情况的程序指针以及一个保存局部变量的调用栈。通常情况下,一个进程依照一个单序列控制流顺序执行,这个控制流被称为该进程的主线程。在任何给定的时刻,一个程序只做一件事情。   一个程序可以通过Python库函数中的os或subprocess模块创建新进程
python之多线程与多进程
原文地址:https://tracholar.github.io/wiki/python/python-multiprocessing-tutorial.html 简介 早已进入多核时代的计算机,怎能不用多线程和多进程进行加速。 我在使用python的过程中,用到过几次多线程和多进程加速,觉得 充分利用CPU节省时间是一种很有“延长生命”的感觉。现将网络上看到的python的 多线程和多...
Python中多线程多进程与协程的区别
进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大。 线程: 调度执行的最小单位,也叫执行路径,不能独立存在,依赖进程存在一个进程至少有一个线程,叫主线程,而多个线程共享内存(数据共享,共享全局变量),从而极大地提高了程序的运行效率。 协程:是一种用户态的轻量级线程,协程的调度完全由用户控制。协...
多线程多进程
多进程#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h>int main() { pid_t child_pid; /* 创建一个子进程 */ child_pid = fork(); if(child_pid == 0) { sleep
python进程,线程,协程,锁等十二个面试问题
任何计算机语言都离不开进程线程以及协程的话题,那么今天我们来聊聊Python的进程,线程以及协程是怎么样运行的,以及锁结构的各种类型,还有最重要的是解密各种遇到的问题!!! 那么下面咱们就直入正题吧! 谈谈对多进程多线程以及协程的理解 进程: 一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大. 线...
5. python多进程锁-实现简易抢票
一、主题 Lock类与RLock类相同:由于进程之间随机调度:某进程可能执行n条后,CPU接着执行其他进程。为了多个进程同时操作一个内存中的资源时不产生混乱,我们使用锁。 Lock类与RLock类的区别:无论是Lock还是RLock,提供的方法都非常简单,acquire和release。但是Lock和RLock的区别是什么呢?RLock允许在同一线程...
Python——多线程多进程与网络套接字编程
一、多进程和多线程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。 在Python中是能够使用多线程,来调度多...
python 多线程多进程爬虫
单线程爬虫 单线程的爬虫速度太慢,对应的我们可以使用多线程或者是进程版本来实现 举个例子,抓取糗事百科热门栏目下的十三个url地址的段子内容,地址: https://www.qiushibaike.com/ 普通面向对象版本 # coding=utf-8 import requests from lxml import etree class QiubaiSpider: def ...
python多线程与多进程理解
1、线程与进程 进程:一个程序的执行实例就是一个进程,每一个进程提供执行程序所需的所有资 源。(进程本质上是资源的集合),操作系统管理在其上面运行的所有进程,并为这些进程公平的分配时间。 线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的...
深入浅析python中的多进程、多线程、协程
进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心,它承担计算机的所有任务。 操作系统是运行在硬件之上的软件,是计算机的管理者,它负责资源的管理和分配、任务的调度。 程序是运行在系统上的具有某种功能的软件,比如说浏览器,音乐播放器等。 每次执行程序的时候,都会完成一定的功能,比如说浏览器帮我们打开网页,为了保证其独立性,就需要一个专门的管理和控制执行程序的数据结...
python爬虫多线程多进程示例
# -*- coding: utf-8 -*- '''美图录‘’‘ #------------------------------------------------- import re import os,stat import time import datetime import urllib import urllib.request from bs4 import BeautifulS...
python中的多线程多进程
并发编程 并发 同时有很多事要做,可以并行处理也可以串行处理 并行 同时做多件事 并发模块 threading模块 线程也叫轻量级进程,它是一个基本的CPU单元,也是程序执行过程中的最小单位。 multiprocessing模块 进程就是一个程序在一个数据集上的一次动态执行的过程。进程一般有程序、数据集、进程控制块三部分组成。 进程和线程的关系 线程是属于进程的 线程是运行在进...
Python自定义的多线程多进程类
最近经常使用到对大量文件进行操作的程序以前每次写的时候都要在函数中再写一个多线程多进程的函数,做了些重复的工作遇到新的任务时还要重写,因此将多线程与多进程的一些简单功能写成一个类,方便使用。功能简单只为以后方便使用。 使用中发现bug会再进行更新     #!/usr/bin/env python # -*- coding: utf-8 -*-
python多线程多进程读取大文件
支持python2.7 3.5 3.6, 运用multiprocessing模块的Pool 异步进程池,分段读取文件(文件编码由chardet自动判断,需pip install chardet),并统计词频,代码如下: # wordcounter.py #!/usr/bin/env python # -*- coding: utf-8 -*- from ...
Python之多进程和多线程详解
1.进程的概念 一个CPU的时候运行,轮询调度实现并发执行 多CPU运行机制: 计算机程序:存储在磁盘上的可执行二进制(或其他类型)文件。 只有把它们加载到内存中,并被操作系统调用它们才会拥有其自己的生命周期。 进程:表示的一个正在执行的程序。 每个进程都拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据 操作系统负责其上所有进程的执行,操作系统会为这些进程合理地分配执行时间。 多...
python3多进程多线程协程IO多路复用等
对python并发进行的笔记整理,个人所学习使用,主要包括多进程,多线程,协程,IO多路复用,进程线程通信等
python 彻底解读多线程与多进程
title: 多线程与多进程 copyright: true top: 0 date: 2019-03-03 16:16:41 tags: 多线程多进程 categories: Python高阶笔记 permalink: password: keywords: description: 对python的多线程多进程进一步刨析。 真是这样的话,有些话,只有准确的时间准确的地点亲口说出来。现在时间错...
搞定python多线程和多进程
1 概念梳理: 1.1 线程1.1.1 什么是线程线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令。1.1.2 线程的工作方式假设你正在读一本书,没有读完,你想休息一
多进程|多线程的不同应用场景:Python还是C
多进程与多线程无论是多进程还是多线程,只要数量一多,效率肯定上不去,为什么呢?我们打个比方,假设你不幸正在准备中考,每天晚上需要做语文、数学、英语、物理、化学这5科的作业,每项作业耗时1小时。如果你先花1小时做语文作业,做完了,再花1小时做数学作业,这样,依次全部做完,一共花5小时,这种方式称为单任务模型,或者批处理任务模型。假设你打算切换到多任务模型,可以先做1分钟语文,再切换到数学作业,做1分...
python多线程 多进程读取数据
利用multiprocessing ,threading,queue来多进程,多线程读取数据。 多进程 from multiprocessing import Process         for i in range(16):           t = Process(target = target)           t.start() from multiprocessing...
python 面试题(进程, 线程, 协程的理解)
进程 进程的定义 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的单位。 进程效率低的原因 进程之间不共享任何状态,进程的调度由操作系统完成,每个进程都有自己的独立的内存空间 进程间的通讯主要是通过信号传递的方式来实现的,实现的方式有多种,信号量,管道,事件等,任何一种方式的通讯效率都需要通过内核,导致通讯效率比较低。 由于是独立的内存空间,上...
面试总结,多进程和多线程的区别
原文链接:http://blog.csdn.net/bing_bing/article/details/8093552 关于多进程和多线程,教科书上最经典的一句话是“进程是资源分配的最小单位,线程是CPU调度的最小单位”。这句话应付考试基本上够了,但如果在工作中遇到类似的选择问题,那就没有那么简单了,选的不好,会让你深受其害。所以他也是面试者最喜欢考察的题目之一。 我们按照多个不同的维度,来看...
程序崩溃调试
程序崩溃调试以及多线程多进程调试_update
linux/unix多线程/多进程编程总结(一)
linux/unix多线程多进程编程总结(二) linux/unix多线程,多进程编程是在实际工作中经常使用到的技能,在C语言或者C++语言面试的时候也经常会被问到此部分内容。 本文对linux/unix系统中的pthread相关的多进程和多线程编程的各个方面进行了总结,包括线程、进程、进程间通信及线程互斥等内容。一方面,给感兴趣的同事浏览斧正;另一方面,也是自己的一个技术笔记,方便以后回顾。...
Linux 多线程和多进程的区别(小结)
最近学习Linux,看到“hairetz的专栏”的帖子不错,特转来大家一起学习。 很想写点关于多进程和多线程的东西,我确实很爱他们。但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手。 今天终于下了决心,写点东西,以后可以再修修补补也无妨。一.为何需要多进程(或者多线程),为何需要并发? 这个问题或许本身都不是个问题。但是对于没有接触过多进程编程的朋友来说,他们确实无法感受到并发的...
python多线程与多进程的选择,以及优劣势
多线程用于IO密集型,如socket,爬虫,web 多进程用于计算密集型,如金融分析
Python多线程多进程中的几个坑
Introduction 本文系转载,原文: 今天遇到的Python多线程、多进程中的几个坑 今天在写oj的判题端的时候犯了一个低级错误,就是为了加快判题速度,我就采用了多线程多组用例同时运行的方法,但是后来不经意的发现,明明跑的很快的程序到了我这实际运行时间就变成了好几倍,而cpu时间并没有太大的变化。 我开始怀疑是runner的问题,因为以前使用ptrace的runner的时候,ptrace会...
Python多线程多进程和线性执行的比较
Thread,Process,Line在编程人生中,一定会遇到计算时间过长的问题,这个时候提高算法效率就成了必然。有几种方法:算法优化、激发CPUGPU的力量等。 我现在分享关于python多线程多进程的方式和心得,用于激发电脑性能。Threadfrom threading import Thread任何优化方式都有自己的局限性,python3由于GIL锁机制的问题,在多线程方面对于一大部分情况效
Python 多线程 多进程 协程 yield
python中多线程和多进程的最大区别是稳定性和效率问题多进程互相之间不影响,一个崩溃了不影响其他进程,稳定性高 多线程因为都在同一进程里,一个线程崩溃了整个进程都完蛋多进程对系统资源开销大,多线程对系统资源开销小,所以这方面来说多线程会比多进程快一点点关于线程和进程的详细使用方法这里有https://www.liaoxuefeng.com/wiki/0014316089557264a6b3489
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 学习python时遇到的问题 区块链问题