python - 多进程不会同时执行

标签 python multiprocessing

我用各种方法检查了这一点,不知道为什么我的各个进程不会同时启动和运行,谷歌没有错误,因为它在大多数情况下都可以工作

 from multiprocessing import Process, Queue, Event #for threading

 class WebScraper(object):
     def __init__(self, pq, e): 
         self.pdfQueue = pq
         self.e = e 

     def run(self):
         i = 0
         while True:
             print('tweet scraper online')
             i = i + 1    #testing
             if i == 10:  #testing
                 e.set()  #testing TODO remove

             if self.e.is_set():
                 print("killing tweet scraper")
                 break


 class DataParser(object):
      def __init__(self, pq, dq,  e):
          self.pdfQueue = pq
         self.dataQueue = dq
         self.e = e
         self.count = 0


      def run(self):

          while True:
              pdf = self.pdfQueue.get()
              print ('parsing pdf')
              self.e.set()
              if self.e.is_set():
                  print ('killing database parser')
                  break


 class DatabaseWriter(object):
     def __init__(self, dq, e): 
          self.dataQueue = dq
          self.e = e 

     def run(self):

         while True:
              print("database writer")
              if self.e.is_set():
                  print ('killing database writer')
                  break


 if __name__ == '__main__':

      print('\nStarting script')
      e = Event()
      pq = Queue()
      dq = Queue()
      ws = WebScraper(pq,  e)
      dp = DataParser(pq, dq, e)
      dw = DatabaseWriter(dq, e)

      p1 = Process(target=ws.run)
      p1.start()
      p2 = Process(target=dp.run)
      p2.start()
      p3 = Process(target=dw.run)
      p3.start()

      p1.join()
      p2.join()
      p3.join()

输出如下,它运行得很快,没有什么意外,因为您可以看到两个进程

 Starting script
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 tweet scraper online
 killing tweet scraper
 database writer
 killing database writer

如果我删除 WebScraper 类中的 if 语句,WebScraper 和 DatabaseWriter 启动,但 DatabaseParser 看起来没有运行

最佳答案

您的 self.pdfQueue.get() 正在阻止 DataParser 实例中的其余方法。请参阅https://docs.python.org/2/library/queue.html#Queue.Queue.get

关于python - 多进程不会同时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49743631/

相关文章:

python - 检查传递给函数的函数

python - 尝试将 cvtColor 与 cv2.COLOR_YUV2BGR_Y422 一起使用时出错 - 错误:函数 cv::cvtColor 中的 (-215) scn == 2 && depth == 0

Python进程不会调用atexit

python - 将实数转换为虚数

python - 无法在Python中使用azure SDK

python - 检查符号 NaN 是否为字符串或 python 缺失值保留符号

python-3.x - python multiprocessing.Queue 没有处理所有的值

multithreading - 使用 openMP 进行多核处理与多线程

python-3.x - multiprocessing.RawArray 操作

python - 我可以在 with 语句中获取 multiprocessing 的 Lock 吗?