相关疑难解决方法(0)

多处理与线程Python

我试图了解多处理优于线程的优势.我知道多处理可以解决Global Interpreter Lock问题,但是还有什么其他优点,并且线程不能做同样的事情?

python multithreading multiprocessing

739
推荐指数
10
解决办法
32万
查看次数

线程池类似于多处理池?

工作线程是否有Pool类,类似于多处理模块的Pool类

我喜欢例如并行化地图功能的简单方法

def long_running_func(p):
    c_func_no_gil(p)

p = multiprocessing.Pool(4)
xs = p.map(long_running_func, range(100))
Run Code Online (Sandbox Code Playgroud)

但是我想在没有创建新流程的开销的情况下这样做.

我知道GIL.但是,在我的用例中,该函数将是一个IO绑定的C函数,python包装器将在实际函数调用之前释放GIL.

我是否必须编写自己的线程池?

python multithreading missing-features

326
推荐指数
8
解决办法
27万
查看次数

276
推荐指数
9
解决办法
16万
查看次数

线程和多处理模块之间有什么区别?

我正在学习如何使用Python中threadingmultiprocessing模块和并行运行某些操作并加快我的代码.

我发现这很难(可能因为我没有任何理论背景)来理解一个threading.Thread()对象和一个对象之间的区别multiprocessing.Process().

此外,我并不完全清楚如何实例化一个作业队列,并且只有4个(例如)它们并行运行,而另一个则在执行之前等待资源释放.

我发现文档中的示例清晰,但不是很详尽; 一旦我尝试使事情复杂化,我就会收到许多奇怪的错误(比如一种无法腌制的方法,等等).

那么,我什么时候应该使用threadingmultiprocessing模块?

您能否将我链接到一些资源,解释这两个模块背后的概念以及如何正确使用它们来完成复杂的任务?

python parallel-processing multithreading process multiprocessing

115
推荐指数
4
解决办法
6万
查看次数

Python字典中的线程安全

我有一个持有字典的班级

class OrderBook:
    orders = {'Restaurant1': None,
              'Restaurant2': None,
              'Restaurant3': None,
              'Restaurant4': None}

    @staticmethod
    def addOrder(restaurant_name, orders):
        OrderBook.orders[restaurant_name] = orders
Run Code Online (Sandbox Code Playgroud)

我正在运行调用该方法的4个线程(每个餐厅一个)OrderBook.addOrder.这是每个线程运行的函数:

def addOrders(restaurant_name):

    #creates orders
    ...

    OrderBook.addOrder(restaurant_name, orders)
Run Code Online (Sandbox Code Playgroud)

这是安全的,还是我必须在打电话前使用锁addOrder

python multithreading dictionary thread-safety

92
推荐指数
3
解决办法
6万
查看次数

为什么全球翻译锁定?

Python全局解释器锁的功能究竟是什么?编译为字节码的其他语言是否采用类似的机制?

python scripting multithreading locking bytecode

86
推荐指数
5
解决办法
2万
查看次数

是python变量赋值原子?

假设我正在使用signal处理程序来处理间隔计时器.

def _aHandler(signum, _):
  global SomeGlobalVariable
  SomeGlobalVariable=True
Run Code Online (Sandbox Code Playgroud)

我可以设置SomeGlobalVariable而不必担心,在设置SomeGlobalVariable(即Python VM正在执行字节码来设置变量)的不太可能的情况下,信号处理程序中的赋值会破坏某些东西吗?(即亚稳态)

更新:我特别感兴趣的是在处理程序之外进行"复合赋值".

(也许我在想"低级别",这一切都在Python中得到了解......来自嵌入式系统的背景,我不时有这些冲动)

python signals

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

深度学习的并行化策略

哪些策略和形式的并行化是可行且可用于训练服务神经网络的?:

  • 机器内部内核(例如 GPU / TPU / CPU)
  • 网络或机架上的机器

我也在寻找有关它们如何用于 TensorFlow、PyTorch 或 MXNet 等的证据。

训练

据我所知,在大型数据集上训练大型神经网络时,至少可以有:

  1. 不同的内核 机器对图的不同部分进行操作(“拆分”)。例如,通过图本身的反向传播可以并行化,例如通过在不同的机器上托管不同的层,因为(我认为?)autodiff 图始终是DAG
  2. 不同的内核 机器不同的数据样本进行操作(“数据拆分”)。在 SGD 中,跨批次或样本的梯度计算也可以并行化(例如,可以在不同批次上独立计算梯度后组合梯度)。我相信这也称为梯度累积(?)。

什么时候每种策略更适合哪种类型的问题或神经网络?现代图书馆支持哪些模式?并且可以结合所有四种(2x2)策略吗?

最重要的是,我已经阅读了:

  • 异步训练
  • 同步训练

但我不知道到底是什么,指的,例如:Is it的计算梯度不同批次的数据或计算梯度不同的子图?或者它可能完全指的是其他东西?

服务

如果网络很大,预测/推理也可能很慢,并且模型在服务时可能不适合内存中的单个机器。是否有任何已知的多核和多节点预测解决方案可以处理此类模型?

distributed-computing deep-learning tensorflow mxnet pytorch

17
推荐指数
2
解决办法
2141
查看次数

使用Python和C api进行多线程处理

我有一个C++程序,它使用C api来使用我的Python库. Python库和C++代码都是多线程的.

特别是,C++程序的一个线程实例化一个继承自的Python对象threading.Thread.我需要所有的C++线程能够调用该对象上的方法.

从我第一次尝试(我天真地只是从主线程实例化对象,然后等待一段时间,然后调用方法)我注意到,执行返回后,与刚刚创建的对象关联的Python线程的执行就会停止到C++程序.

如果执行仍然使用Python(例如,如果我调用PyRun_SimpleString("time.sleep(5)");),Python线程的执行将在后台继续执行,一切正常,直到等待结束并执行返回到C++.

我显然做错了什么.我应该怎么做才能让两个我的C++和Python的多线程和能够彼此很好地工作?我以前没有这方面的经验所以请不要假设!

c++ python multithreading python-c-api

10
推荐指数
1
解决办法
6759
查看次数

为什么单个python进程的cpu使用率可以超过100%?

由于GIL,我认为多线程python进程一次只能运行一个线程,因此cpu使用率不能超过100%.

但我发现下面的代码可以占用顶部950%的CPU使用率.

import threading
import time

def f():
    while 1:
        pass


for i in range(10):
    t = threading.Thread(target=f)
    t.setDaemon(True)
    t.start()

time.sleep(60)
Run Code Online (Sandbox Code Playgroud)

这与Python解释器使用高达130%的CPU的问题不同.怎么可能?.在那个问题中,OP表示他正在进行I/O密集型负载测试,这可能会释放GIL.但在我的程序中,没有I/O操作.

测试在CPython 2.6.6上运行.

python multithreading cpython

7
推荐指数
1
解决办法
2023
查看次数