2024-05-15 09:42:27 发布
网友
当一个新线程在Python(2.7)中启动时,有没有一种方法可以运行任意方法?我的目标是使用setproctitle为每个生成的线程设置适当的标题。在
只是继承自线程。线程并且使用这个类而不是Thread-只要你能控制线程。在
import threading class MyThread(threading.Thread): def __init__(self, callable, *args, **kwargs): super(MyThread, self).__init__(*args, **kwargs) self._call_on_start = callable def start(self): self._call_on_start() super(MyThread, self).start()
就像一幅粗糙的素描。在
编辑 从现有的应用程序中注入新的“评论”的需要。假设您有一个脚本,它本身导入其他库。这些库使用threading模块:
threading
在导入任何其他模块之前,首先执行此操作
由于后续导入只在sys.modules中进行查找,所有其他使用此功能的库现在都应该使用我们的新类。我认为这是一次黑客攻击,可能会有奇怪的副作用。但至少值得一试。在
sys.modules
请注意:threading.Thread不是在python中实现并发的唯一方法,还有其他选项,如multiprocessing等。。这些在这里不受影响。在
threading.Thread
multiprocessing
编辑2 我刚刚看了一下你引用的库,它是关于进程的,而不是线程!所以,只要做一个:%s/threading/multiprocessing/g和:%s/Thread/Process/g就可以了。在
:%s/threading/multiprocessing/g
:%s/Thread/Process/g
使用threading.setprofile。你给它一个回调函数,Python会在每次新线程启动时调用它。在
threading.setprofile
文档here。在
只是继承自线程。线程并且使用这个类而不是Thread-只要你能控制线程。在
就像一幅粗糙的素描。在
编辑 从现有的应用程序中注入新的“评论”的需要。假设您有一个脚本,它本身导入其他库。这些库使用
threading
模块:在导入任何其他模块之前,首先执行此操作
^{pr2}$由于后续导入只在
sys.modules
中进行查找,所有其他使用此功能的库现在都应该使用我们的新类。我认为这是一次黑客攻击,可能会有奇怪的副作用。但至少值得一试。在请注意:
threading.Thread
不是在python中实现并发的唯一方法,还有其他选项,如multiprocessing
等。。这些在这里不受影响。在编辑2 我刚刚看了一下你引用的库,它是关于进程的,而不是线程!所以,只要做一个
:%s/threading/multiprocessing/g
和:%s/Thread/Process/g
就可以了。在使用
threading.setprofile
。你给它一个回调函数,Python会在每次新线程启动时调用它。在文档here。在
相关问题 更多 >
编程相关推荐