【问题标题】:Python (django) call two management commands at the same timePython(django)同时调用两个管理命令
【发布时间】:2021-01-05 22:09:11
【问题描述】:

我正在为我的管理命令编写单元测试。我想同时使用 call_command() 函数运行我的两个管理命令。我怎样才能做到这一点?我需要同时运行它们,因为它们确实协同工作,一个创建数据,另一个使用该数据。

【问题讨论】:

  • 您能告诉我们这些管理命令的来源吗?
  • 它很长,但我可以描述。其中之一实际上是检查当时在 while 循环中哪个状态室,并为该状态创建数据。其他也在while循环中工作并检查数据并更改房间状态。所以简单地说有while循环。如果你还需要源代码,我可以分享。
  • Please don't post screenshots of text。它们无法被搜索或复制,并且可用性差。相反,将代码作为文本直接粘贴到您的问题中。如果选择它并单击{} 按钮或Ctrl+K,则代码块将缩进四个空格,这将导致其呈现为代码。
  • 听起来你的管理命令可能都不应该是管理命令。无论如何,我们不需要完整的源代码; minimal reproducible example 就可以了。
  • 我下次会注意谢谢指教,管理命令暂时要保持现在这样。

标签: python django command python-unittest django-unittest


【解决方案1】:

虽然我当然不认为这是正确的方法,但两个在 Python 中“同时”运行两件事的正确方法是使用 threads

以下代码将启动两个线程,每个线程运行自己的管理命令。

from threading import Thread

def function1():
    call_command('fake')

def function2():
    call_command('engine')

thread1 = Thread(target=function1)
thread2 = Thread(target=function2)

thread1.start() # returns immediately
thread2.start() # returns immediately

import time
time.sleep(3600) # now we wait...

更好的方法是尝试创建一个管理命令来满足您的需要,这样就不需要线程。您会发现使用线程,尤其是作为初学者,会使事情变得不必要地复杂。

【讨论】:

  • 非常感谢,这就是我想要的。实际上其中一个命令是临时的,所以我们将来会更改它,但感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 2020-06-10
  • 2012-05-04
  • 1970-01-01
  • 2011-04-12
  • 2012-03-21
  • 2012-06-29
  • 2012-05-01
  • 1970-01-01
相关资源
最近更新 更多