首页 > 解决方案 > 在 python 中调用带有线程守护进程的程序

问题描述

我在 python 中有一个加密项目,我想为整个项目编写一个端到端测试。

我可以在命令行中运行项目,如下所示:

> python -m  serve -c config.json

对于端到端测试,我编写了这个测试函数,但是当我运行它时,会发生错误,而从命令行简单运行项目的一切都很好。

def test_assert_end_to_end(self):
    args = []

    config = load_config(args, "config.json")

    t = threading.Thread(target=serve.run, name='serve', args=(args, ))
    t = threading.Thread(target=serve.run, name='serve', args=(config,))
    t.daemon = True
    t.start()

    self.unseal()

    plain_data = bytes(''.join([chr(random.randint(0, 128))
                               for i in range(EndToEndTest.SIZE_OF_DATA_TO_ENCRYPT * 1024 * 1024)]), "utf-8")

    EncryptResponseBytes = self.encrypt(plain_data)
    DecryptResponseBytes = self.decrypt(EncryptResponseBytes)

    self.assertEqual(plain_data, DecryptResponseBytes)

这是错误的日志:

    signal.signal(signal.SIGTERM, self._graceful_exit)
  File "/usr/lib/python3.6/signal.py", line 47, in signal
    handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main threa

它指的是这个功能:

    def serve(self):
        self.sealer_server.start()
        self.cipher_server.start()
        signal.signal(signal.SIGTERM, self._graceful_exit)

有谁知道我该如何解决这个错误?

标签: pythonpython-3.xmultithreadingsignals

解决方案


推荐阅读