如何在 python 中使用多个线程调用同一个函数?
How to call the same function using multiple threads in python?
我正在 python 开发信号处理应用程序。我想在python中用多个线程调用同一个函数,实现并发执行,可不可以?如果有怎么办?
长话短说:不,因为 Global Interpreter Lock。
但是你可能想考虑使用进程而不是线程,这似乎是你应用程序的真正需要(从你的解释中可以理解),因为你似乎不需要使用共享内存 space.
一个(非常)简单的例子:
import multiprocessing
def worker(num):
""" Worker procedure
"""
print('Worker:', str(num))
# Mind the "if" instruction!
if __name__ == '__main__':
jobs = [] # list of jobs
jobs_num = 5 # number of workers
for i in range(jobs_num):
# Declare a new process and pass arguments to it
p1 = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p1)
# Declare a new process and pass arguments to it
p2 = multiprocessing.Process(target=worker, args=(i+10,))
jobs.append(p2)
p1.start() # starting workers
p2.start() # starting workers
此示例将为您提供以下输出:
$ python multiprocessing_example.py
Worker: 0
Worker: 10
Worker: 1
Worker: 11
Worker: 2
Worker: 12
Worker: 3
Worker: 13
Worker: 4
Worker: 14
为了充分利用多进程,我建议您了解一下 the documentation of the module、GIL、线程和进程之间的差异,尤其是它如何加速或限制您想要的做和怎么做。
例如,如果您的瓶颈是 I/O,那么进行多处理将无济于事,但如果您的处理受到您的 CPU.
的限制,则会有所帮助
我正在 python 开发信号处理应用程序。我想在python中用多个线程调用同一个函数,实现并发执行,可不可以?如果有怎么办?
长话短说:不,因为 Global Interpreter Lock。
但是你可能想考虑使用进程而不是线程,这似乎是你应用程序的真正需要(从你的解释中可以理解),因为你似乎不需要使用共享内存 space.
一个(非常)简单的例子:
import multiprocessing
def worker(num):
""" Worker procedure
"""
print('Worker:', str(num))
# Mind the "if" instruction!
if __name__ == '__main__':
jobs = [] # list of jobs
jobs_num = 5 # number of workers
for i in range(jobs_num):
# Declare a new process and pass arguments to it
p1 = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p1)
# Declare a new process and pass arguments to it
p2 = multiprocessing.Process(target=worker, args=(i+10,))
jobs.append(p2)
p1.start() # starting workers
p2.start() # starting workers
此示例将为您提供以下输出:
$ python multiprocessing_example.py
Worker: 0
Worker: 10
Worker: 1
Worker: 11
Worker: 2
Worker: 12
Worker: 3
Worker: 13
Worker: 4
Worker: 14
为了充分利用多进程,我建议您了解一下 the documentation of the module、GIL、线程和进程之间的差异,尤其是它如何加速或限制您想要的做和怎么做。
例如,如果您的瓶颈是 I/O,那么进行多处理将无济于事,但如果您的处理受到您的 CPU.
的限制,则会有所帮助