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

我对Python很陌生,我需要在代码中实现多线程。

我有一个巨大的.csv文件(百万行)作为输入。我读了这一行,对每一行进行了休息请求,对每一行进行了一些处理,然后将输出写入另一个文件。输入/输出文件中行的顺序确实很重要。现在,我正在逐行执行此操作。我想运行相同的代码,但要并行运行,即从.csv文件读取20行输入,并并行进行其余调用,以便我的程序更快。

我一直在阅读http://docs.python.org/2/library/queue.html,但是我读到有关python GIL的问题,该问题说,即使在多线程之后,代码也不会运行得更快。还有其他方法可以以简单的方式实现多线程吗?


小怪兽爱吃肉
浏览 168回答 2
2回答

德玛西亚99

Python在IO上发布GIL。如果大部分时间都花在休息请求上;您可以使用线程来加快处理速度:try:    from gevent.pool import Pool # $ pip install gevent    import gevent.monkey; gevent.monkey.patch_all() # patch stdlibexcept ImportError: # fallback on using threads    from multiprocessing.dummy import Poolimport urllib2    def process_line(url):    try:        return urllib2.urlopen(url).read(), None    except EnvironmentError as e:        return None, ewith 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()它来创建多个流程。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python