有没有办法同时使用两个乌龟在一个窗口中同时画两个圆?我试过这段代码,但两只乌龟在不同的窗口中绘制
from multiprocessing import Process
import turtle
t1=turtle.Turtle()
t2=turtle.Turtle()
def tes1():
t1.speed(0)
i=0
while i < 360:
t1.forward(1)
t1.left(1)
i+=1
def tes2():
t2.speed(0)
i=0
while i < 360:
t2.forward(1)
t2.right(1)
i+=1
if __name__ == '__main__':
p1 = Process(target=tes1)
p1.start()
p2 = Process(target=tes2)
p2.start()
p1.join()
p2.join()
但是有人告诉我尝试多线程,但是这段代码有一个糟糕的语义错误!!
import threading
import turtle
t1=turtle.Turtle()
t2=turtle.Turtle()
def tes1():
t1.speed(0)
i=0
while i < 360:
t1.forward(1)
t1.left(1)
i+=1
def tes2():
t2.speed(0)
i=0
while i < 360:
t2.forward(1)
t2.right(1)
i+=1
t = threading.Thread(target=tes1)
t.daemon = True # thread dies when main thread (only non-daemon thread) exits.
t.start()
t3 = threading.Thread(target=tes2)
t3.daemon = True # thread dies when main thread (only non-daemon thread) exits.
t3.start()
最好的建议是多处理还是多线程?
发布于 2013-10-21 23:28:12
乌龟真的有必要在不同的线程中吗?那这个呢?
import turtle
t1 = turtle.Turtle()
t2 = turtle.Turtle()
t1.speed(0)
t2.speed(0)
for i in range(360):
t1.forward(1)
t1.left(1)
t2.forward(1)
t2.right(1)
发布于 2013-10-21 23:36:22
一次8只乌龟也没有问题。
import turtle
turtle.delay(0)
t = [turtle.Turtle() for i in range(8)]
for i, j in enumerate(t):
j.right(i*45)
j.speed(0)
for i in range(360):
for j in t:
j.forward(1)
j.right(1)
发布于 2018-06-05 05:25:20
我已经创建了一个threaded_turtle
包,它利用queue.Queue
的功能无缝地执行主线程中的所有海龟指令,而代码仍然像海龟运行在不同的线程中一样编写。
threaded_turtle
在GitLab上:https://gitlab.com/zvone/threaded_turtle
有了这个包,问题中的代码只需稍加修改即可工作:
import turtle
from threaded_turtle import ThreadSerializer, TurtleThread
ctrl = ThreadSerializer() ## <-- create a serializer
t1=turtle.Turtle()
t2=turtle.Turtle()
def tes1(t1): ## <-- additional argument
t1.speed(0)
i=0
while i < 360:
t1.forward(1)
t1.left(1)
i+=1
def tes2(t2): ## <-- additional argument
t2.speed(0)
i=0
while i < 360:
t2.forward(1)
t2.right(1)
i+=1
t = TurtleThread(ctrl, t1, target=tes1) ## <-- additional arguments
t.daemon = True
t.start()
t3 = TurtleThread(ctrl, t2, target=tes2) ## <-- additional arguments
t3.daemon = True
t3.start()
ctrl.run_forever(1) ## <-- run the serializer
结果是:
https://stackoverflow.com/questions/19498447
复制相似问题