Ski*_*mag 7 python multithreading decorator
我正在尝试将线程(使用装饰器)实现到我的应用程序,但无法理解有关锁和管理线程的一些事情.
import threading
def run_in_thread(fn):
def run(*k, **kw):
t = threading.Thread(target=fn, args=k, kwargs=kw)
t.start()
return run
class A:
@run_in_thread
def method1(self):
for x in range(10000):
print x
@run_in_thread
def method2(self):
for y in list('wlkefjwfejwiefwhfwfkjshkjadgfjhkewgfjwjefjwe'):
print y
def stop_thread(self):
pass
c = A()
c.method1()
c.method2()
Run Code Online (Sandbox Code Playgroud)
据我所知,method1和method2不是同步的,而是在锁的帮助下同步实现的东西.如何为我的装饰器功能添加锁?
如何实现使用装饰器停止长线程的方法?
如果将函数扩展为
def run_in_thread(fn):
def run(*k, **kw):
t = threading.Thread(target=fn, args=k, kwargs=kw)
t.start()
return t # <-- this is new!
return run
Run Code Online (Sandbox Code Playgroud)
即,让包装函数返回创建的线程,你可以这样做
c = A()
t1 = c.method1()
t1.join() # wait for it to finish
t2 = c.method2()
# ...
Run Code Online (Sandbox Code Playgroud)
一世.e,获取原始方法运行的线程,用它做任何你想做的事情(例如加入它)然后再调用下一个方法.
如果您在特定情况下不需要它,则可以省略它.
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |