一个线程 1 让线程 2 去调用一个函数用装饰器怎么实现python demo
时间: 2024-05-03 12:17:42 浏览: 74
可以使用装饰器来实现这个功能,示例代码如下:
```python
def thread_control(func):
def wrapper(*args, **kwargs):
# 线程1调用,等待线程2执行完毕
event = threading.Event()
thread2 = threading.Thread(target=func, args=args, kwargs=kwargs)
thread2.start()
event.wait()
return wrapper
@thread_control
def func_to_be_called():
# 线程2调用的函数
print('This function is being called by Thread 2.')
# 通知线程1可以继续执行
event.set()
# 线程1调用
func_to_be_called()
```
这个装饰器函数 `thread_control()` 可以用来封装任意需要在另一个线程中执行的函数。调用被装饰的函数时,被封装的函数会在新开的线程中执行,而调用者的线程则会被阻塞,直到被封装的函数执行完毕后才会继续执行。在被封装的函数中需要通知调用者线程可以继续执行时,可以调用 `event.set()` 来设置一个事件,调用者线程通过 `event.wait()` 来等待这个事件被设置。
相关问题
一个线程 1 让线程 2 去调用一个函数怎么实现python demo
在Python中,可以使用多线程模块 `threading` 来实现线程。
下面是一个示例代码,其中线程1调用 `thread_func()` 函数后,通过 `Event()` 对象 `event` 等待线程2的信号,线程2在调用完 `function()` 后通过 `event.set()` 发送信号给线程1。
```
import threading
def thread_func(event):
print("线程1:准备调用函数")
event.wait() # 等待信号
print("线程1:收到信号,继续执行")
def function():
print("线程2:调用函数")
# TODO:在这里添加需要执行的函数逻辑
event = threading.Event()
t1 = threading.Thread(target=thread_func, args=(event,))
t2 = threading.Thread(target=function)
t1.start()
t2.start()
t2.join()
event.set() # 发送信号
t1.join()
```
需要注意的是,由于 Python 的全局解释器锁(GIL)限制,多线程并不能真正发挥计算机多核 CPU 的性能,因此在需要开发高并发的应用程序时,建议使用异步并发模型,例如 Python 3.x 中的 `asyncio` 模块等。
python 多线程demo
以下是一个简单的 Python 多线程示例:
```python
import threading
def print_hello():
for i in range(5):
print("Hello")
def print_world():
for i in range(5):
print("World")
# 创建两个线程
t1 = threading.Thread(target=print_hello)
t2 = threading.Thread(target=print_world)
# 启动两个线程
t1.start()
t2.start()
# 等待两个线程执行完毕
t1.join()
t2.join()
print("Done")
```
这个例子中,我们创建了两个函数 `print_hello` 和 `print_world`,并且将它们分别放在两个线程中执行。我们通过 `threading.Thread` 创建了两个线程,并且通过 `start` 启动它们。
最后,我们调用 `join` 等待两个线程执行完毕。这个例子中,我们简单地让每个线程打印 "Hello" 和 "World" 五次,并在最后打印 "Done"。
阅读全文
相关推荐












