python - 在 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)
有谁知道我该如何解决这个错误?
解决方案
推荐阅读
- python - 在递归函数中访问全局变量
- c# - 根据 MSDN,为什么 .NET 类 System.String 现在位于三个不同的程序集中?
- fortran - Fortran 执行时间
- facebook - facebook messenger 无需用户发起聊天即可发送消息 api
- android - 发布变体 lintVitalRelease 上的 RuntimeError
- sql - 如何与sql server中的上述记录进行比较
- node.js - 如何从 aws lambda 节点连接到 Realm
- python-2.7 - Geonode 图层页面 URL 无效
- firebase - Firestore 限制
- wordpress - 无法使用 get_field() wordpress 对单独的帖子对象字段进行多次调用