【问题标题】:How to call the same function using multiple threads in python?如何在python中使用多个线程调用相同的函数?
【发布时间】:2018-03-28 06:18:37
【问题描述】:

我正在使用 python 开发信号处理应用程序。我想在python中使用多个线程调用相同的函数,实现并发执行是否可以做到?如果有怎么办?

【问题讨论】:

  • 这个问题真的很宽泛。您始终可以调用相同的函数。那不是问题。如果函数正在共享数据,则可能会出现问题。为此,我们需要更多细节。
  • 如果你真的想要concurrent execution 和multiple threads in python,那么答案是:由于全局解释器锁,这是不可能的。您可以改用多进程。
  • @StephenRauch 我正在尝试实现 LMS 滤波器组。银行的每个分行都会获得唯一的数据供其处理。不过它们都有相同的功能。
  • @rollstuhlfahrer 谢谢

标签: python multithreading concurrency parallel-processing signal-processing


【解决方案1】:

长话短说:不,因为Global Interpreter Lock。

但是您可能需要考虑使用进程而不是线程,这似乎是您对应用程序的真正需要(据您的解释可以理解),因为您似乎不需要使用共享内存空间。

一个(非常)简单的例子:

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 的限制,则会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2013-10-17
    • 2018-05-25
    • 1970-01-01
    相关资源
    最近更新 更多