2 回答
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()它来创建多个流程。
添加回答
举报