我正在运行一个使用简单线程方案的刮刀程序(使用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,结果相同。另外,我在主函数调用上有阻塞器,如下所示。
if __name__ == '__main__':
get_stats()
在使用多处理库进行编译时,是否有一个简单的技巧?我试图弄清楚为什么它作为一个脚本可以正常工作但是像exe一样破坏。
答案 0 :(得分:1)
我无法回答关于py2exe ...但是pyinstaller这是一个已知问题,有很好的文档解决方法(这对我来说一直很有用)
https://stackoverflow.com/a/27694505/541038
提供了问题和解决方案的良好概述