为了账号安全,请及时绑定邮箱和手机立即绑定

使用队列在python中进行多线程

使用队列在python中进行多线程

小怪兽爱吃肉 2021-03-29 14:06:21
我对Python很陌生,我需要在代码中实现多线程。我有一个巨大的.csv文件(百万行)作为输入。我读了这一行,对每一行进行了休息请求,对每一行进行了一些处理,然后将输出写入另一个文件。输入/输出文件中行的顺序确实很重要。现在,我正在逐行执行此操作。我想运行相同的代码,但要并行运行,即从.csv文件读取20行输入,并并行进行其余调用,以便我的程序更快。我一直在阅读http://docs.python.org/2/library/queue.html,但是我读到有关python GIL的问题,该问题说,即使在多线程之后,代码也不会运行得更快。还有其他方法可以以简单的方式实现多线程吗?
查看完整描述

2 回答

?
德玛西亚99

TA贡献1770条经验 获得超3个赞

Python在IO上发布GIL。如果大部分时间都花在休息请求上;您可以使用线程来加快处理速度:


try:

    from gevent.pool import Pool # $ pip install gevent

    import gevent.monkey; gevent.monkey.patch_all() # patch stdlib

except ImportError: # fallback on using threads

    from multiprocessing.dummy import Pool


import urllib2    


def process_line(url):

    try:

        return urllib2.urlopen(url).read(), None

    except EnvironmentError as e:

        return None, e


with open('input.csv', 'rb') as file, open('output.txt', 'wb') as outfile:

    pool = Pool(20) # use 20 concurrent connections

    for result, error in pool.imap_unordered(process_line, file):

        if error is None:

            outfile.write(result)

输入/输出顺序是否相同?您可以使用imap代替imap_unordered。


如果您的程序是CPU绑定的;您可以使用multiprocessing.Pool()它来创建多个流程。


查看完整回答
反对 回复 2021-04-02
  • 2 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信