簡體   English   中英

如何在python中的后台線程上運行阻止進程

[英]How to run a blocking process on a background thread in python

我有一個單元測試腳本,需要測試所有其余的api。 同時,我還有一個生成消息的xmpp服務器。

我需要在單元測試中運行xmpp的實例,以接收這些消息。 但是問題在於,xmpp是一個阻止進程。

---> self.process(塊=真)

這導致單元測試停止。

有什么辦法可以在后台線程上運行此xmpp並繼續接收消息並在主線程上運行單元測試。 如果是,我是否可以實現一個代碼段。

提前致謝。

  1. 一種解決方案是在setUp()例程的后台啟動服務器-即os.system('myserver &') ,然后在測試結束時在tearDown()中將其殺死

  2. 如果要直接控制服務器,請使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM