编译的Python多处理锁定CPU

时间:2014-12-30 19:25:57

标签: python multithreading py2exe pyinstaller python-multithreading

我正在运行一个使用简单线程方案的刮刀程序(使用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一样破坏。

1 个答案:

答案 0 :(得分:1)

我无法回答关于py2exe ...但是pyinstaller这是一个已知问题,有很好的文档解决方法(这对我来说一直很有用)

https://stackoverflow.com/a/27694505/541038

提供了问题和解决方案的良好概述