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?

阅读 5.3k
1 个回答

可以通过multiprocessing模块的:

1. Pipe
2. Value, Array
3. Queue
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题