相关疑难解决方法(0)

如何在Python中循环多线程操作

假设我有一个非常大的列表,我正在执行这样的操作:

for item in items:
    try:
        api.my_operation(item)
    except:
        print 'error with item'
Run Code Online (Sandbox Code Playgroud)

我的问题有两个方面:

  • 有很多项目
  • api.my_operation需要永远回归

我想使用多线程一次启动一堆api.my_operations,这样我就可以同时处理5个或10个甚至100个项目.

如果my_operation()返回一个异常(因为我可能已经处理过该项) - 那没关系.它不会破坏任何东西.循环可以继续到下一个项目.

注意:这适用于Python 2.7.3

python multithreading python-multithreading

46
推荐指数
4
解决办法
7万
查看次数

在终端和Django或Flask的代码模块中使用python多处理池

在python中使用multiprocessing.Pool时,如下代码,有一些奇怪的行为.

from multiprocessing import Pool
p = Pool(3)
def f(x): return x
threads = [p.apply_async(f, [i]) for i in range(20)]
for t in threads:
    try: print(t.get(timeout=1))
    except Exception: pass
Run Code Online (Sandbox Code Playgroud)

我得到以下错误三次(池中的每个线程一个),并打印"3"到"19":

AttributeError: 'module' object has no attribute 'f'
Run Code Online (Sandbox Code Playgroud)

前三个apply_async调用永远不会返回.

同时,如果我尝试:

from multiprocessing import Pool
p = Pool(3)
def f(x): print(x)
p.map(f, range(20))
Run Code Online (Sandbox Code Playgroud)

我得到了AttributeError 3次,shell打印"6"到"19",然后挂起并且不能被[Ctrl] + [C]杀死

多处理文档有以下说法:

此程序包中的功能要求模块可由子项导入.

这是什么意思?

为了澄清,我在终端中运行代码来测试功能,但最终我希望能够将其放入Web服务器的模块中.你如何在python终端和代码模块中正确使用multiprocessing.Pool?

python django pool multiprocessing flask

19
推荐指数
2
解决办法
1万
查看次数

解决Ipython Notebook中的多处理错误?

我正在尝试在Ipython Notebook中使用多处理模块,但是当我执行我的代码时,它崩溃了内核:

from multiprocessing import Pool

def f(x):
    return x*x

p = Pool(8)
p.map(f, [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

文档提供了这些信息:

此程序包中的功能要求模块可由子项导入.这在编程指南中有所涉及,但值得在此指出.这意味着某些示例(例如multiprocessing.Pool示例)在交互式解释器中不起作用

但是,该模块似乎适用于某些模块,例如本教程:

http://nbviewer.jupyter.org/github/ResearchComputing/Python-HPC-Spring-2013/blob/master/08_parallel/multiprocessing.ipynb

其他stackoverflow线程表明您应该重新排列代码,如下所示:

另一个与多处理错误的混淆,'module'对象没有属性'f'

但我仍然得到同样的错误:

AttributeError: 'module' object has no attribute 'f'
Run Code Online (Sandbox Code Playgroud)

我使用的是Windows 8,Python 2.7.12以及最新版本的IPython Notebook/Anaconda发行版.

这个bug有没有明确的解决方案?

错误的来源真的缺少if __name__ =="__ main__":声明吗?

这是一个特定于Windows的问题,还是也适用于unix?

python ipython multiprocessing

5
推荐指数
0
解决办法
978
查看次数

python 池不起作用

我正在尝试使用多线程,为了首先保持简单,我正在运行以下代码:

import multiprocessing as mp

pool = mp.Pool(4)

def square(x):

    return x**2

results=pool.map(square,range(1,20))
Run Code Online (Sandbox Code Playgroud)

据我了解,结果应该是一个包含从 1 到 20 的方块的列表。但是,代码似乎没有终止。(在没有池眨眼完成的情况下执行相同操作,这运行了几分钟,然后我手动停止它) 。

附加信息:任务管理器告诉我,附加的 python 进程已启动并正在运行,但使用了 0% 的 cpu;当程序运行时,其他不相关的进程(例如 Firefox)的 CPU 使用率也会飙升。我使用的是 Windows 8 和 i5-4300U cpu(池化到 2 个而不是 4 个也没有帮助)

我究竟做错了什么?Pool 类上有什么好的资源可以帮助我理解我的代码有什么问题吗?

python multithreading

3
推荐指数
1
解决办法
5525
查看次数