import threading num = 0 def test1(): global num if mutex.acquire(): for i in range(100000): num += 1 print(num) mutex.release() def test2(): global num if mutex.acquire(): for i in range(100000): num += 1 print(num) mutex.release() mutex = threading.Lock() p1 = threading.Thread(target=test1) p1.start() p2 = threading.Thread(target=test2) p2.start() print(num)
用了互斥锁也还是会出错
老师您好:下面的代码中 把for循环里面的i换成t 代码有颜色提示,但是也可以运行,怎么回事呢?
#测试多线程 import threading,time def saySorry(): print("子线程%s启动"%(threading.current_thread().name)) time.sleep(1) print("亲爱的,我错了") if __name__ == "__main__": print("主线程%s启动"%(threading.current_thread().name)) for i in range(5): t = threading.Thread(target=saySorry) #Thread() 指定线程要执行的代码 t.start()
为什么运行结束这个程序还没有结束啊,输出哪里显示还在运行中
老师执行结果的时候只有一行,一直在运行中,结束不了,这是什么原因啊
老师您好
下面代码放到python3中报错,怎么修改呢
#测试进程 from multiprocessing import Queue,Process import time def write(q): for value in ["a","b","c"]: print("开始写入:",value) q.put(value) time.sleep(1) def read(q): while True: if not q.empty(): print("读取到的是:",q.get()) time.sleep(1) else: break if __name__ == "__main__": q = Queue() pw = Process(target=write,args=(q,)) pr = Process(target=read,args=(q,)) pw.start() pw.join() pr.start() pr.join() print("接收完毕!")
这一小节没有看明白,不明白举3例子说明了啥 = = !
因为我把前两个例子里的fun2()注释掉,只留fun1()感觉和TreadLocal结果一样。。。。
所以晕乎了
1、局部变量
1.jpg
2、全局变量-字典
2.jpg
3、threading.local
3.jpg
1554123195(1).jpg
是因为执行太快,导致两个线程的数据混乱了么~~
#进程池创建进程 #进程池是用来创建成百上千的多个进程 from multiprocessing import Pool import random,time def work(num): print(random.random()*num) time.sleep(3) if __name__ == "__main__": po = Pool(3) #定义一个进程池,最大进程数为3,默认大小为CPU核数 for i in range(10): po.apply_async(work,(i,)) #apply_async选择要调用,每次循环会用空出来的子进程去调用目标 po.close() #进程池关闭之后不再接收新的请求,但是之前已经接收的请求会执行完 po.join() #等待po中所有子进程结束,必须放在close后面 #在多进程中:主进程一般用来等待,真正的任务都在子进程中执行
为什么按着代码敲完,运行的时候没有结果,程序也一直在运行中
1553175115(1).jpg
#进程间通信---Queue #通过Queue(队列Q)可以实现进程间的数据传递 #Q本身是一个消息队列 from multiprocessing import Process from multiprocessing import Pool from multiprocessing import Queue def run1(q): q.put("消息") q.put("消息") def run2(q): print(q.qsize()) print(q.get()) print(q.qsize()) if __name__ == "__main__": q = Queue(3) p1 = Process(target=run1,args=(q,)) p2 = Process(target=run2,args=(q,)) p1.start() p2.start() p1.join() p2.join()
1553174940(1).jpg
这个错误是咋回事,网上找了也没解决
multiprocessing time write(q): i : (,i) q.put(i) read(q): time.sleep() i (q.qsize()): (,q.get()) __name__ == : q = multiprocessing.Manager().Queue() po = multiprocessing.Pool() po.apply_async(write,(q,)) po.apply_async(read,(q,)) po.close() po.join()
老师这个运行不出结果
multiprocessing time write(q): value [,,]: (,value) q.put(value) time.sleep() read(q): : q.empty(): (,q.get()) time.sleep() : __name__ == : q = multiprocessing.Queue() pw = multiprocessing.Process(= write,=(q,)) pr = multiprocessing.Process(= read,=(q,)) pw.start() pw.join() pr.start() pr.join() ()
复制的程序 执行结果不对
进程,线程的调用对象不是太明白
他们的调用对象只能是函数,类吗?可以是模块,项目吗?
a,b两个进程同时运行,如何实现a进程停止时,不管b进程运行不运行,实现b进程的停止运行。
主进程创建子进程,那子进程可以创建子进程吗,还是子进程下吗没有了,就只有多个线程了呢?
如下图所示,为什么报错threading中没有Thread这个属性呢
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637