我有一个小问题,我一个人无法解决(因为我不太擅长多线程),这是我想做的事情: 我想做一个程序,每5秒执行一组预定义的任务,一个例程。但是用户必须有可能要求程序以最高优先级执行另一个任务(而不是例程),而不必关闭所有程序。 所以我想创建两个线程,一个用于管理任务(例行任务和用户定义的任务)
在下面的代码中,您将找到:
任务:用户要求执行的任务列表,由两个线程更新
数据:数据库,由线程2更新
looping _ * :两个变量,以了解循环是否应该继续进行
stop_all():停止两个线程。两个线程都使用它
thread1():读取输入并更新任务列表。
add_date(), add_number():用于更新数据库的方法,仅由线程2使用。
routine():如果用户没有要求其他任务(如果列表任务为空),则是程序必须执行的默认任务集。 更新_
thread2():正在管理任务的执行顺序
这是代码:
import numpy as np
import datetime
import time
from threading import Thread
tasks = []
data = []
def stop_all():
global looping_main
global looping_add_tasks
looping_main = False
looping_add_tasks = False
#Thread 1 : CLI + tasks update
def thread1():
global looping_add_tasks, tasks, data
looping_add_tasks = True
while looping_add_tasks:
t = input('Enter a task : ')
if t == "add_date":
tasks.append(t)
elif t == "add_number":
tasks.append(t)
elif t == "break":
stop_all()
elif t == "show_data":
print(data)
elif t == "show_tasks":
print(tasks)
else:
print("last command : \"", t, "\" not valid")
time.sleep(0.2)
#Thread 2 : data + tasks update
def add_date():
data.append(datetime.datetime.now())
def add_number():
data.append(np.random.randint(0, 12))
def routine():
#Executes actions on the data if there are no others tasks to do
pass
def thread2():
global looping_main, tasks, data
looping_main = True
while looping_main:
if len(tasks) > 0:
current_task = tasks[0]
tasks = tasks[1::]
if current_task == "add_date":
add_date()
elif current_task == "add_number":
add_number()
else:
routine()
if len(data) > 10:
stop_all()
time.sleep(0.2)
Thread(target = thread1).start()
Thread(target = thread2).start()
问题如下:
我可以在输出中摆脱此行:“ >>>”(请参阅:)
Enter a task : update_number
>>>
Enter a task :
P.S。我认为我给这个问题起的名字是不合适的,因此,如果您有想法要更改它,我欢迎您提出建议。 感谢您的阅读。 编辑:对代码进行了细微更改