How to use classes with Python multiprocessing?

后端 未结 2 956

Here\'s some sample code that is reads a file and adds up each line. It is supposed to add up all the numbers from 0-20. However, I always get a result of 0.

<
相关标签:
2条回答
  • 2021-01-27 02:40

    Each subprocess calling f updates its own copy of total and therefore main process's total is not affected.

    You can have each subprocess return the result of its computation (in your mock example, that's just the input, unchanged), and then accumulate it in the main process. E.g.:

    def f(input):
      return input
    
    results = pool.map(f, mock_file)
    for res in results:
      total.add(res)
    
    0 讨论(0)
  • 2021-01-27 02:41

    You can accomplish this using shared memory with subprocess.Value, just change your Total class to the following:

    class Total():
        def __init__(self):
            self.total = multiprocessing.Value('d', 0)
    
        def add(self, number):
            self.total.value += int(number)
    
        def __str__(self):
            return str(self.total.value)
    
    0 讨论(0)
提交回复
热议问题