【问题标题】:Compiled Python Multiprocessing Locks CPU编译后的 Python 多处理锁 CPU
【发布时间】: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


    【解决方案1】:

    我无法回答有关 py2exe 的问题……但 pyinstaller 这是一个已知问题,有一个有据可查的解决方法(一直对我有用)

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

    很好地概述了问题和解决方案

    【讨论】:

    • 如果运行良好,将multiprocessing.freeze_support() 添加到__main__。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2022-10-08
    • 2015-07-17
    相关资源
    最近更新 更多