我在 Python 上制作了一個 Cookie Clicker 游戲,并試圖讓兩個函式在無限回圈中并行運行。
我需要它們并行,因為我希望它們中的一個每秒向一個變數添加一個,而另一個每隔十秒向另一個變數添加一個。我只是通過使用來做到這一點time.sleep(),但如果我對兩者都使用相同的回圈,它只會運行第一個函式,等待 1 秒然后添加一個,然后等待 10 秒并添加另一個。
有誰知道解決這個問題的方法?
def farm():
time.sleep(random.choice(range(1, 3)))`
x = 1
def automatic():
time.sleep(random.choice(range(1, 10)))
y = 1
while True:
farm()
automatic()
這是我的代碼有點簡化
我嘗試使用執行緒庫中的兩個不同執行緒,但開始崩潰。
uj5u.com熱心網友回復:
您可以不使用執行緒,而是將您的睡眠移到每個函式之外,并檢查每個周期是否應該觸發相關函式。
import time, random
def farm():
print("farm")
def automatic():
print("automatic")
next_farm = random.choice(range(1, 3))
next_automatic = random.choice(range(1, 10))
while True:
if next_farm > 0:
next_farm -= 1
else:
farm()
next_farm = random.choice(range(1, 3))
if next_automatic > 0:
next_automatic -= 1
else:
automatic()
next_automatic = random.choice(range(1, 10))
time.sleep(1)
uj5u.com熱心網友回復:
這取決于您用于制作游戲的框架。我假設您使用的是 PyGame(因為無限回圈),它與多執行緒不兼容。我建議您跟蹤最后一個事件觸發器,例如使用or模塊呼叫automatic和呼叫的時間,并在例如 1s 或 10s 已過時通過使用 if 陳述句進行檢查來呼叫它們。farmtimedatetime
uj5u.com熱心網友回復:
如果您需要并行運行這兩個功能,您可以這樣做:
from threading import Thread
def func1():
print('Working')
def func2():
print("Working")
if __name__ == '__main__':
Thread(target = func1).start()
Thread(target = func2).start()
uj5u.com熱心網友回復:
使用執行緒將解決您的問題:
def farm():
x = 0
while True:
time.sleep(random.choice(range(1, 3)))
x = 1
print('Thread 1 value is: ' str(x))
def automatic():
y = 0
while True:
time.sleep(random.choice(range(1, 10)))
y = 1
print('Thread 2 value is: ' str(y))
e = threading.Event()
t1 = threading.Thread(target=farm)
t1.start()
t2 = threading.Thread(target=automatic)
t2.start()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451971.html
標籤:Python 多线程 python-多线程
上一篇:從不同執行緒訪問佇列兩端時的同步
