python多进程多线程和gevent怎样让数据正确的共享.
import time
import gevent
from threading import Thread
from multiprocessing import Process
okinfo_list=[]
Ainfo_list=[ainfo for ainfo in range(3000)]#需求模拟
Binfo_list=[binfo for binfo in range(10000)]#需求模拟
def geventgetinfo(ainfo):
gevent.sleep(2)
for binfo in Binfo_list:
gevent.sleep(2)
if ainfo==binfo:
okinfo_list.append("{ainfo}:{binfo}".format(ainfo=ainfo,binfo=binfo))
break
def geventrun(star,end):
taske=[gevent.spawn(geventgetinfo,ainfo) for ainfo in Ainfo_list[star:end]]
gevent.joinall(taske)
def threadrun():
for i in range(0,3000,300):
threadtemp=Thread(target=geventrun,args=(i,i+300))
threadtemp.start()
threadtemp.join()
def mulrun():
for i in range(4):
Process(target=threadrun).start()
if __name__=='__main__':
stime=time.clock()
# threadrun() #能正常输出结果
# mulrun() #okinfo_list为空
print(okinfo_list)
print(time.clock()-stime)
想要用多进程开多线程,然后每个线程中运行gevent的taske,如果只是多线程运行,数据没有问题,但是加入多进程后就不行了,想要的是多进程运行最后数据也能正确的输出,这种情况有什么好的解决方案吗?加入Queue或者Manager?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以通过multiprocessing模块的: