python多进程多线程和gevent怎样让数据正确的共享.

发布于 2022-09-05 19:31:40 字数 1126 浏览 33 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哑剧 2022-09-12 19:31:40

可以通过multiprocessing模块的:

1. Pipe
2. Value, Array
3. Queue
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文