python - 如何在Python中使用多线程调用同一个函数?

标签 python multithreading concurrency parallel-processing signal-processing

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

最佳答案

长话短说:不,因为 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 的限制,则会有所帮助。

关于python - 如何在Python中使用多线程调用同一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49527400/

相关文章:

perl - 在perl中使用多线程处理文件

python - 如何在 TraisUI 中指定 VSplit 和 HSplit 的分割比例?

python - 如何使用 Flask-login 进行工作日志记录?

python - 从文本中提取年龄值以在 pandas 中创建新列

python - 在 Python 中创建一个临时 FIFO(命名管道)?

java - FutureTask 和 HttpSession 同步

c# - 等待锁定执行的任务数组

c++ - 是否可以在不锁定或提供 future 的情况下进行查找或创建?

java - 我想在 android 应用程序中实现 AsyncTask 并行执行器

php - 安全并发写入 Perl 和 PHP 脚本之间共享的文件