在Flask中使用ThreadPoolExecutor会导致线程过多

时间:2015-01-02 23:05:31

标签: python multithreading flask pool executor

我正在研究一个小瓶子应用程序。

这个想法是当用户点击"更新全部"时,实用程序类将所有已定义的服务器提交给更新程序,该更新程序调用每个服务器" get()"方法

route.py:

@servers.route('/update/<id>')
def update(id):

  servers = UcxServer.query.filter(id != None)


  def update_server(server):
    server.create_ucx()
    server.update_ucx()
    return threading.current_thread().name, server 

  with Pool(max_workers=5) as executor:
    start = timer()

    for name, server in executor.map(update_server, servers):
        print("%s %s" % (name, server)) # print results
        db.session.add(server)
        db.session.commit()


  print('time:', timer() - start)




  flash('All servers have been updated')
  return redirect(url_for('servers.index'))

多次使用此按钮时会出现问题,因为它会不断产生新线程。如果我有5台服务器,我第一次使用按钮时会得到5个线程。下次10,依此类推。

执行此线程管理的正确方法是什么,以便在应用程序启动拼写后我不会使用一百万个线程?

由于

0 个答案:

没有答案