Python:为什么同一个函数的2个调用不能并行运行?

时间:2017-10-18 12:20:14

标签: python django python-3.x

我试图使用multiprocessing模块并行调用具有不同参数的相同函数。

以下是我的代码示例:

from django.apps import AppConfig

class CurrencyRatesConfig(AppConfig):
    name = 'currency_rates'

    def ready(self):
        import time
        from multiprocessing import Process

        import currency_rates.ws_get_rates

        p1 = Process(currency_rates.ws_get_rates.get_rates('1m', 'tBTCUSD', 'BTC2USD'))
        p1.start()
        p2 = Process(currency_rates.ws_get_rates.get_rates('1m', 'tIOTUSD', 'IOT2USD'))
        p2.start()

        p1.join()
        p2.join()

但它不起作用。我只看到了p1的执行结果。

注意:get_rates()使用websocket模块。

有人可以描述什么是错的吗?

感谢。

1 个答案:

答案 0 :(得分:0)

问题在于Process参数。修改如下:

此演示 工作。不确定为什么OP没有解决具体问题。

from multiprocessing import Process
import time
import sys

def outputString(thestring):
    for i in range(3):
        print(thestring)
        time.sleep(2)
    return

def main():
    p1 = Process(target=outputString, args=('P1 is processing',))
    p1.start()
    p2 = Process(target=outputString, args=('P2 is processing',))
    p2.start()

if __name__ == "__main__":
    main()

OP原始代码(已修改)

from django.apps import AppConfig

class CurrencyRatesConfig(AppConfig):
    name = 'currency_rates'

    def ready(self):
        import time
        from multiprocessing import Process

        import currency_rates.ws_get_rates

        p1 = Process(target=currency_rates.ws_get_rates.get_rates, args=('1m', 'tBTCUSD', 'BTC2USD'))
        p1.start()
        p2 = Process(target=currency_rates.ws_get_rates.get_rates, args=('1m', 'tIOTUSD', 'IOT2USD'))
        p2.start()