【发布时间】:2015-02-26 23:08:45
【问题描述】:
我正在运行一个使用简单线程方案的抓取程序(使用requests 库)。每个线程都会上网,抓取一些数据,然后返回一个字典。我正在使用的多线程代码(使用multiprocessing 库的Pool)如下所示:
def get_stats():
symbols = create_input_list('.\\combined_in.csv')
pool = Pool(4)
results = pool.map(return_info, symbols)
print results
curr_date_time = datetime.now().strftime('%m-%d-%y_[%H_%M_%S]')
out_uri = '.\scraped_info_out_' + curr_date_time + '.csv'
create_output_file(out_uri, results)
这作为在 powershell 中运行的脚本非常有效,但在编译为 exe 时效果不佳。我最初使用 py2exe,它创建的 exe 很好,但是当运行时打开一个空白终端,锁定整个计算机,产生大约 10 个我可以在任务管理器中看到的进程,最终必须手动重新启动。 py2exe 脚本同样简单,如下所示:
from distutils.core import setup
import py2exe
setup(console=['scraper.py'])
考虑到 py2exe 可能无法与多处理库配合使用,我也尝试了 pyInstaller,结果相同。另外,我在 main 函数调用上确实有如下拦截器。
if __name__ == '__main__':
get_stats()
在使用多处理库进行编译时,我是否缺少一个简单的技巧?我试图弄清楚为什么它可以作为脚本正常工作,但作为 exe 却如此难以破解。
【问题讨论】:
标签: python multithreading py2exe pyinstaller python-multithreading