多处理后调用正常函数

时间:2017-05-24 08:40:02

标签: python multiprocessing python-multiprocessing

我有一个代表汽车刺激的代码,它基本上从文本文件读取gps点并确定汽车的速度。

多处理用于同时读取多个文本文件

我希望在多处理准备好调用检测到流量的列表后立即调用一个函数。

目前它正在多处理之前调用该函数并将其调用5次(多个进程的数量),尽管这些没有链接。

   def stimulation():
if __name__ == '__main__':
    p1 = Process(target=getGPSPointsFromFile, args=('gpstest-notraffic',))
    p1.start()
    #p1.join()
    p3 = Process(target=getGPSPointsFromFile, args=('gpstest-traffic-aldomoro2',))
    p3.start()
    #p3.join()
    p4 = Process(target=getGPSPointsFromFile, args=('gpstest-traffic-kappara1',))
    p4.start()
    #p4.join()
    p5 = Process(target=getGPSPointsFromFile, args=('gpstest-traffic-kappara2',))
    p5.start()


stimulation()
getStreetName()

我想要的只是在刺激后调用getStreetName()方法

1 个答案:

答案 0 :(得分:0)

您开始的每个进程都会读取整个python文件并执行,因此您的每个进程都会调用这些函数 此if __name__ == '__main__':确保后续块仅由主进程执行 您需要等待每个流程完成(通过调用join()),然后调用您的函数

if __name__ == '__main__':
    p1 = Process(target=getGPSPointsFromFile, args=('gpstest-notraffic',))
    p1.start()
    p3 = Process(target=getGPSPointsFromFile, args=('gpstest-traffic-aldomoro2',))
    p3.start()
    p4 = Process(target=getGPSPointsFromFile, args=('gpstest-traffic-kappara1',))
    p4.start()
    p5 = Process(target=getGPSPointsFromFile, args=('gpstest-traffic-kappara2',))
    p5.start() 
    p1.join()
    p3.join()
    p4.join()
    p5.join()
    stimulation()
    getStreetName()

此外,您可能希望在列表中收集进程,然后您可以迭代它们并在每个进程上调用join,无论您生成多少进程