如果在一段时间后又遇到验证码,可以将上述的全局变量 `function_executed` 重新设置为 `False`,以便下次特定函数执行时可以再次执行。
- import threading
- import time
- # 全局变量,用于标记特定函数是否已经执行
- function_executed = False
- # 特定函数
- def special_function():
- global function_executed
- if not function_executed:
- # 执行特定操作,例如验证码的处理
- print("执行特定函数")
- function_executed = True
- # 多线程任务
- def worker():
- # 其他任务...
- # 在遇到特定函数时,只执行一次
- special_function()
- # 其他任务...
- # 定时重置全局变量
- def reset_variable():
- global function_executed
- while True:
- time.sleep(10 * 60) # 每隔10分钟重置一次
- function_executed = False
- # 创建并启动多个线程
- threads = []
- for _ in range(10):
- t = threading.Thread(target=worker)
- threads.append(t)
- t.start()
- # 创建并启动重置全局变量的线程
- reset_thread = threading.Thread(target=reset_variable)
- reset_thread.start()
- # 等待所有线程结束
- for t in threads:
- t.join()
- # 等待重置线程结束
- reset_thread.join()
复制代码
在上述示例中,新增了一个名为 `reset_variable` 的函数,该函数会周期性地重置全局变量 `function_executed`,这里使用了一个循环和 `time.sleep` 来实现定时重置。可以根据实际需求调整重置的时间间隔。
这样,在每次重置后,特定函数又可以被执行一次,以处理后续遇到的验证码或其他需要执行一次的操作。
请注意,对全局变量的访问和修改要进行线程同步,以避免多个线程同时修改导致的竞争条件。可以使用锁或其他同步机制来确保线程安全。