Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 一次最多允许5个函数的并发实例_Python_Python 3.x_Queue_Python Multithreading - Fatal编程技术网

Python 一次最多允许5个函数的并发实例

Python 一次最多允许5个函数的并发实例,python,python-3.x,queue,python-multithreading,Python,Python 3.x,Queue,Python Multithreading,我有以下在独立线程中运行的函数。其中最多可以有100个线程同时运行 def do_stuff(项目): """ 假设最多可以同时运行100个此函数 """ #通常持续10-15秒 #并且没有并发限制 结果\u 1=无限\u网络\u调用() #通常持续20-25秒 #其中只有五个可以同时运行 结果2=有限的网络呼叫(结果1) #通常持续5-10秒 #并且没有并发限制 最终结果=另一个网络调用(结果2) 返回最终结果 我想不出处理以下问题的最佳方法: do\u stuff函数可以无限制地并发运行

我有以下在独立线程中运行的函数。其中最多可以有100个线程同时运行

def do_stuff(项目):
"""
假设最多可以同时运行100个此函数
"""
#通常持续10-15秒
#并且没有并发限制
结果\u 1=无限\u网络\u调用()
#通常持续20-25秒
#其中只有五个可以同时运行
结果2=有限的网络呼叫(结果1)
#通常持续5-10秒
#并且没有并发限制
最终结果=另一个网络调用(结果2)
返回最终结果
我想不出处理以下问题的最佳方法:

  • do\u stuff
    函数可以无限制地并发运行
  • unlimited\u network\u调用
    也不同时受到限制
  • 但是,
    有限的网络呼叫
    是,一次只能运行5次
我尝试使用一个队列,每个队列有5个工作线程,但问题是我不知道如何将工作线程处理队列中的项目的结果返回到
do\u stuff
函数,同时让
do\u stuff
函数等待此结果


也许还有其他我不会想到的有效方法。

我认为信号量在这种情况下很有用。您可以给信号量对象一个初始值5,然后在acquire()和release()块之间环绕有限的_network_调用(结果_1)。你可以参考@PranjalDoshi这正是我想要的