[英]How to run a blocking process on a background thread in python
我有一個單元測試腳本,需要測試所有其余的api。 同時,我還有一個生成消息的xmpp服務器。
我需要在單元測試中運行xmpp的實例,以接收這些消息。 但是問題在於,xmpp是一個阻止進程。
---> self.process(塊=真)
這導致單元測試停止。
有什么辦法可以在后台線程上運行此xmpp並繼續接收消息並在主線程上運行單元測試。 如果是,我是否可以實現一個代碼段。
提前致謝。
一種解決方案是在setUp()
例程的后台啟動服務器-即os.system('myserver &')
,然后在測試結束時在tearDown()
中將其殺死
如果要直接控制服務器,請使用fork()
並遵循與#1大致相同的模式。
例:
import os, sys, subprocess, time, unittest
def server():
try:
for _ in xrange(5, 0, -1):
print 'ding'
time.sleep(1)
except KeyboardInterrupt:
pass
class TestClient(unittest.TestCase):
def setUp(self):
self.server_pid = None
pid = os.fork()
if not pid: # child
return server()
# parent
self.server_pid = pid
def test1(self):
print 'test server, PID',self.server_pid
time.sleep(2)
def tearDown(self):
if not self.server_pid:
return
import signal
os.kill(self.server_pid, signal.SIGINT)
運行:
python -m unittest ptest
輸出:
測試服務器,PID 16490 ding ding。測試服務器,PID無
-------------------------------------------------- --------------------在2.003秒內進行了1次測試
好
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.