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

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()

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

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

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

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

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() 这样一个线程,这个线程未被执行。
第二个线程和第一个一样,都是执行了你的函数,创建了一个空线程。

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()

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python与多线程多进程
多线程与多进程多线程与多进程优劣比较Python与多线程多进程CPU和IO密集型举例判断方法:多线程多进程 多线程与多进程优劣比较 Python与多线程多进程 CPU和IO密集型 举例 https://www.cnblogs.com/zhangyubao/p/7003535.html CPU密集型代码:各种循环处理、计数等等 IO密集型代码:文件处理、网络爬虫等 判断方法: 直接看CPU占用率...
python 多线程多进程爬虫
单线程爬虫 单线程的爬虫速度太慢,对应的我们可以使用多线程或者是进程版本来实现 举个例子,抓取糗事百科热门栏目下的十三个url地址的段子内容,地址: https://www.qiushibaike.com/ 普通面向对象版本 # coding=utf-8 import requests from lxml import etree class QiubaiSpider: def ...
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多线程多进程中的几个坑
Introduction 本文系转载,原文: 今天遇到的Python多线程、多进程中的几个坑 今天在写oj的判题端的时候犯了一个低级错误,就是为了加快判题速度,我就采用了多线程多组用例同时运行的方法,但是后来不经意的发现,明明跑的很快的程序到了我这实际运行时间就变成了好几倍,而cpu时间并没有太大的变化。 我开始怀疑是runner的问题,因为以前使用ptrace的runner的时候,ptrace会...
python深度解析之多线程多进程协程
python深度解析之多线程多进程协程,文章对多进程的协程做了原理介绍和代码的实例说明,能很快明白其中的用法,很不错,推荐给大家
Python多线程多进程和线性执行的比较
Thread,Process,Line在编程人生中,一定会遇到计算时间过长的问题,这个时候提高算法效率就成了必然。有几种方法:算法优化、激发CPUGPU的力量等。 我现在分享关于python多线程多进程的方式和心得,用于激发电脑性能。Threadfrom threading import Thread任何优化方式都有自己的局限性,python3由于GIL锁机制的问题,在多线程方面对于一大部分情况效
mfc多线程多进程读写问题
要求 多线程编程:读者-写者问题。(1人)中级rn 设置两类线程,一类为读者,一类为写者;rn 使用菜单随机启动读者或写者;rn 在窗口上显示读者或写者执行状态;rn 随着线程的执行,更新窗口的显示;rn哪个大哥大姐给我做一下,本人对mfc不熟,会用java写,老是不让用。郁闷。。。.rn谢谢了,就是最近要,最好能给一点小注释,因为我要把代码读懂去验收。。。rn
多线程多进程CPU占用问题
当某个进程的子线程全都处于sleep状态的时候,该进程仍然占用CPU,那么CPU此时会去执行其他进程吗?
多线程多进程操作
多线程任务处理 多进程任务处理 协程多任务处理 线程(Thread)     程序实际执行者是线程,线程称为轻量级进程,是一个cpu的执行单元,每个进程至少会有一个主线程   多线程编程 Python2中标准模块thread 和threading Python3中模块_thread和 threading _thread在最底层操作不易 一般推荐使用threading   ...
gdb调试多线程多进程
多进程调试 我们使用gdb调试程序,gdb的调试默认是调试父进程的,如果要做到对父进程和子进程都做到调试,所以附加了调试子进程的功能。 1. 设置条件 如果让gdb可以同时调试多个程序,只需要设置follow-fork-mode(默认:parent)和detach-on-fork(默认:on)就好了。 follow-fork-mode detach-on-fork 操作 ...
GDB 下的多线程多进程调试
多线程      通过set non-stop 来设置当一个线程中断在断点时,整个程序其他线程可以继续运行。      通过info threads 来查看生成的子线程        通过thread 编号可以切换线程 多进程      当我们调试多进程程序前,需要设置俩个选项。         follow-fork-mode (默认parent)和 detach-on-fork(默
PHP实现多线程多进程
教会你PHP怎么实现多线程实现多进程,网上很多中文的是瞎扯淡,这个是英文的,希望对你有所帮助
多线程多进程共享内存自学手册
进程和线程 定义: 进程是具有一定独立功能的某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位,当一个进程内有多个线程时,线程的程序是其所属进程的一部分 ,表示进程中的一个控制点,执行一系列的指令,同属于一个进程的其他线程共享进程所拥有的全部资源(包括地址空间)它是比进程更小的能独立运行的基本单位,线程自己基本上不拥有系统资源,只拥有一旦运行中比不可少的资源,(如程序计数器,...
多线程多进程爬虫,代理服务器
此代码用于爬虫图片
GDB多线程多进程调试
gdb多线程调试gdb提供的多线程调试工具 新线程创建自动提醒 thread thread-id实现不同线程之间的切换 info threads查询存在的线程 thread apply [thread-id-list] [all] args在一系列线程上执行命令 线程中设置指定的断点 set print thread-events控制打印线程启动或结束是的信息 set scheduler-locki
服务端的并发处理-多线程多进程
服务端的并发处理-多线程多进程 在服务端进行挂起监听的时候,可能会遇到同时大量的用户进行连接和数据请求,那么单进程的可以使用多路复用的方式进行解决这个问题,这个技术后面再讲,现在最简单的解决方案就是使用多线程和多进程 多线程与多进程的选择这取决于到底是IO密集型还是CPU密集型,IO密集型需要使用多线程,cpu密集型进行多进程 这里显然就是io密集型的,但是为了练习,现在使用多线程和多进程都实验一...
第二十二课 多线程多进程2
一、课程代码笔记1. from multiprocessing import Manager, Process def worker(dt, lt): for i in range(10): dt[i] = i*i lt += [x for x in range(11, 16)] if __name__ == '__main__': manager = ...
单线程多线程多进程爬虫实例
分别使用单线程,多线程,多进程爬取网站图片,python3.7实测可用,其他版本没有试过,存放文件的路径请根据需要进行更改。无意中发现的小网站,悠着点,别给爬崩了。参考了很多大神分享的代码,非常感谢,有问题或者建议也请提出来,一起进步。
gdb调试多线程多进程程序
gdb的简介和功能:gdb是GNU开发的一个在Unix,Linux上使用的C/C++和汇编语言程序的调试工具,它主要帮助用户在调试程序时完成以下工作: 启动程序,按照用户要求影响程序的运行 设置断点,在指定位置停止 当程序停止,检查它出现什么问题 动态改变程序的执行环境,可以先纠正一个错误,然后再纠正其他错误 使用gdb为了发挥gdb的功能,需要在编译源程序时加上-g选项,这样才能够在目标代码加入调
TCP、UDP的传输及多线程多进程传输
网络基础的讲解: https://blog.csdn.net/Z_JUAN1/article/details/81281606   socket常见API      从应用层到传输层有一个接口:socket API 接口      因此不管是服务器还是客户端在通信时都需要创建socket 一、这是UDP socket的流程 服务器整体思想:     创建socket,绑定地址端...
基于tcp的小型服务器(多线程多进程)
在深入理解计算机系统第11章中,讲到一个echo服务器,基于tcp字节流的小型服务器,利用socket套接字接口,完成了一个简易的服务器。具体细节可参考网络编程(编写一个小型服务器)–csapp11章。不过这个小型服务器有一个难以接受的缺点在于:它是单进程的服务器,也就是它只能服务一个客户,我们先不去讨论这个功能强弱,我们知道在现实生活中,一个网站,一个服务器必须要能够服务多个用户,如果只能服务一个
基于TCP协议:实现简单的多线程多进程服务器
为什么要多线程多进程服务器? 相比于UDP来说,由于UDP是不需要连接的,可直接通信。所以基于UDP协议的服务器,并不需要考虑到多客户端同时访问服务器时接受数据的问题。而TCP协议是需要连接的,在一个客户端连接上服务器后,这个时候服务器就开始于客户端进行消息的发送与接收。那么其它的客户端在这个时候是无法与服务器连接的。这个时候就需要考虑多线程或者多进程的服务器来应对这个问题了。 基于TCP协议...
linux网络编程/多线程多进程服务器与进程线程池
一、多进程服务器 1、服务器端代码: #include<stdio.h> #include<stdlib.h> #include<netinet/in.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<string.h>//./tcp_server 127.0.0.1 8080 static
linux网络编程之多线程多进程服务器与进程线程池
一.实现tcp服务端多进程编写#include<stdio.h> #include<stdlib.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<string.h> #include <netinet/in.h>static void usage(const char* proc) {
简单的TCP网络程序,多线程多进程版本
和连接中的UDP类似,实现一个简单的英译汉的功能https://blog.csdn.net/Damn_Yang/article/details/88382298 封装TCP socket tcp_socket.hpp #pragma once #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; #include &amp;lt;stdlib.h&amp;...
C++多线程多进程服务器muduo函数查询表(一)
本文记录下本人在写服务器过程中遇到的一些相关函数,其具体详解参考给定的参考网址,本文只是做个记录,便于以后再次查询相关函数: 1.(setsockopt(listen_fd, SOL_SOCKET, SO_REUSEADDR, &amp;optval, sizeof(optval)) == -1) 允许重用地址!!!消除bind时"Address already in us...
socket套接字编写多线程多进程的server和client
关于套接字编程 套接字编程 IP地址+端口号就成为套接字 在TCP协议中。建立两个连接的进程个字有一个socket来标识,那么这两个socket组成desocketpair就表示一个唯一链接 socket用来描述网络连接一对一关系 socket地址的数据类型及相关函数 第一个是通用接口 第二个表示IPV4的地址使用socketaddr_in 第三个表示预间套接字 这样我们只需要
520深夜混合多线程多进程debug总结
居然在图书馆肝到现在,还是520,太有意义了必须纪念下 来先看一下作业(其实很简单,毕竟源码都给我们了,虽然是一堆bug的源码,这里手动打出gg) 第三次作业: 分析矩阵相乘源码,画出程序流程图,编译并运行程序。 分析源码中的问题,逐一说明 提交程序流程图和程序解决方案 提交实验源程序(50%注释) 辅助程序(生成矩阵程序,打印矩阵程序) 用生成...
c++多线程多进程服务器muduo相关函数查询表(二)
如表一所示,本文也只是作为记录,想了解具体的函数使用方法,请进入相应的链接中查看: 1、pthread_once(pthread_once_t *once_control, void (*init_routine) (void)) 在多线程环境中,有些函数仅需要执行一次,可以采用pthread_once来声明,具体是哪个线程 执行由Linux内核调度来进行 https://blog.cs...
c++多线程多进程服务器muduo相关函数查询表(三)
如表二所示,本文也只是作为记录,想了解具体的函数使用方法,请进入相应的链接中查看: 1、setbuffer()函数 有三种缓存类型存在,不缓存,块缓存,和行缓存 https://blog.csdn.net/cjsycyl/article/details/8730048 2、std::move() 函数可以以非常简单的方式将左值引用转换为右值引用。 https://www.cnblogs.com...
PyQt5界面多线程多进程爬虫(爬了600w张网页, 出现了一些问题)
代码:(先占位置) 图片:
select服务器端的代码以及select的优缺点与多线程多进程服务器的比较
.select服务器优缺点:  优点:  (1)select()的可移植性更好,在某些Unix系统上不支持poll() ;  (2)select() 对于超时值提供了更好的精度:微秒,而poll是毫秒;  (3)select服务器不需要建立多个线程、进程就可以实现一对多的通信;  (4)select服务器可以同时等待多个文件描述符,效率比起多进程多线程来说要高很多。 缺点:  (
多线程多进程服务的数据队列处理怎么样解决重复读取的问题【很难希望能推荐】
我现在要开发一个多线程的服务来读取数据库表中的队列数据出来进行处理。处理过程中要调用webservice之类的接口,所以处理过程中可能会出错,导致有些数据会处理失败。rn另外我这个服务要部署到多台机器同时运行,读取同一个数据库的数据来处理。rn现在的疑问就是,怎么保证让每台服务器的服务的每个线程从数据库读取的数据都是不重复的,即数据不被重复读取rnrn表中的数据量非常大,上千万,每天几百万的数量级增加,数据有状态标识,处理过的数据会改变状态rnrn
python问题
[img=https://img-bbs.csdn.net/upload/201708/16/1502859614_920692.png][/img]rnrn如图是我写的python的代码以及运行的结果,其实我就是不知道红色框里面的给定的参数为什么传送进来了。在设置name以及age的值的时候我故意不满足要求,结果在执行的时候总是会把最开始传入实例的值给打印出来,这个是为什么啊?求大神帮帮忙,我是菜鸟才看了几天的资料。
python 问题
python 问题rn rn我用python 编一个源文件 最简单的那个 rn再用ide 或cmd 读取 rn为什么 总是不能成功 rn或者找不到路径 或者句法错误 或者什么不清晰 defined rn好像都遇到过 rn具体原因有些 怎样解决? rnxp系统
Python问题:
Wing IDE中,Python编写以下代码,运行时报错: builtins.TypeError: object() takes no parameters rn是什么原因,哪位大神帮忙解答一下,我看自己写的代码没有问题呀,__init__()函数的下划线也是用的两个。rn如下代码:rnclass Dog:rn """一次模拟小狗的简单尝试"""rn rndef __init__(self, name, age):rn """初始化属性name和age"""rn self.name = namern self.age = agern rndef sit(self):rn """模拟小狗被命令时蹲下"""rn print(self.name.title()+"is now sitting.")rn rndef roll_over(self):rn """模拟小狗被命令时打滚"""rn print(self.name.title()+"roll over!") rn rnmy_dog = Dog("willie",6)rnprint ("my dog's name is "+ my_dog.name.title() +".")rnprint ("my dog's age is " + str(my_dog.age) +"years old.")rn
python的问题
有个软件内嵌了PYTHON,可以用PYTHON开发和扩展该软件的功能,问题:“PYTHON 能不能模拟按下指定的键盘上的某个建?”,用来调用软件中的一些快捷建,实现特定的功能
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数