How to use queue with concurrent future ThreadPoolExecutor in python 3?

前端 未结 1 1710
盖世英雄少女心
盖世英雄少女心 2021-01-19 08:07

I am using simple threading modules to do concurrent jobs. Now I would like to take advantages of concurrent futures modules. Can some put me a example of using a queue with

相关标签:
1条回答
  • 2021-01-19 08:42

    I would suggest something like this:

    def run(queue):
          item = queue.get()
          self.__log.info(str(item))
          return True
    <queue filled here>
    workerThreadsToStart = 10
    with concurrent.futures.ThreadPoolExecutor(max_workers = 100) as executor:
            furtureIteams = { executor.submit(run, queue): index for intex in range(workerThreadsToStart)}
            for future in concurrent.futures.as_completed(furtureIteams):
                f = furtureIteams[future]
                print(f)
    

    The problem you will run in is that a queue is thought to be endless and as a medium to decouple the threads that put something into the queue and threads that get items out of the queue.

    When

    1. you have a finite number of items or
    2. you compute all items at once

    and afterwards process them in parallel, a queue makes no sense. A ThreadPoolExecutor makes a queue obsolete in these cases.

    I had a look at the ThreadPoolExecutor source:

    def submit(self, fn, *args, **kwargs): # line 94
        self._work_queue.put(w) # line 102
    

    A Queue is used inside.

    0 讨论(0)
提交回复
热议问题