【问题标题】:How to thread a flask app and function with a while loop to run simultaneously?如何线程化烧瓶应用程序并使用while循环运行以同时运行?
【发布时间】:2019-03-30 23:06:52
【问题描述】:

我有一个烧瓶应用程序,我想在后台运行一个 while 循环。我的第一个想法是使用线程同时运行它们。我偶然发现的问题是只有第一个线程有效(无论是烧瓶应用程序还是带有 while 循环的函数首先出现)。我的代码是:

from multiprocessing import Process

if __name__ == '__main__':
    Process(target = app.run(host='0.0.0.0', port=8080)).start()
    Process(target = statupdate()).start()

注意:我还使用了“线程”库,并让烧瓶应用程序拥有自己的功能。

有什么方法可以修复这个错误或同时运行这两个错误吗?

【问题讨论】:

  • 您缺少太多基础知识,无法在答案中涵盖它们。 Learn the basics of concurrency。您似乎不了解线程和进程之间的区别。您似乎完全不知道 GIL。看起来您正在调用app.run(...)startupdate(),然后调用一个新进程来调用其结果。这几乎肯定是错误的,因为 target 本身应该是可调用的。 SO 并不打算取代那种研究;您需要更好地掌握基础知识,才能使您的问题变得足够狭窄。

标签: python python-3.x multithreading flask


【解决方案1】:

你有几个问题:

  • 在这种情况下,您不是线程,而是多处理。这是完全不同的东西,但仍会实现您的目标。
  • 您正在运行这些函数,而不是将它们作为目标。

为了使这项工作,请不要运行该函数:

Process(target=app.run, kwargs=dict(host='0.0.0.0', port=8080)).start()
Process(target=statupdate).start()

【讨论】:

  • 对于这个问题,你的答案是完美的,因为这两个功能同时工作。但是,我在函数“statupdate”中的 while 循环没有工作或激活(while 循环打开、编辑和关闭文件;文件未更新)。任何想法为什么?
  • 没关系,问题与文件没有随着 while 循环的每次迭代而更新有关。否则这是正确的答案。
猜你喜欢
  • 2018-09-27
  • 2015-07-05
  • 2019-11-13
  • 2018-12-13
  • 2021-12-22
  • 2016-07-12
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
相关资源
最近更新 更多