我正在尝试在我的python GUI中运行进度栏,而抓狂的蜘蛛会执行其工作。我尝试了几种多线程解决方案,例如下面的解决方案,但是没有一个对我有用。
p1 = Process(target=RunSpiders())
p1.start()
p2 = Process(target=ProgressBar())
p2.start()
c = p1.join()
p2.join()
if c != None:
p2.stop()
RunSpiders()
方法运行两个蜘蛛,不是直接使用它们,而是创建并执行cmd命令。该程序似乎每次都只执行最先放置的过程。起初我以为这是因为scrapy是一个异步框架,但是我的代码比RunSpider()
方法中与cmd命令执行相关的代码更多(例如prints),并且这些代码也没有出现,所以我认为我的错误可能是由于错误使用multiprocessing
引起的。
ProgressBar()
的代码:
def ProgressBar():
progress = ttk.Progressbar(window, orient=tk.HORIZONTAL, length=int(window_width/2), mode='indeterminate')
progress.place(x=int(window_width/4), y=y)
i = 0
while True:
if i == 100:
i = 0
progress['value'] = i
window.update_idletasks()
i = i + 0.01
print("···")
Runspiders():
的代码
def RunSpiders():
codeS1 = 0
codeS2 = 0
if s1.get():
os.chdir('../')
print(os.getcwd())
cmd = "scrapy crawl Spider1"
codeS1 = os.system(cmd)
if s2.get():
os.chdir('../')
print(os.getcwd())
cmd = "scrapy crawl Spider2"
codeS2 = os.system(cmd)
codeS = codeS1 + codeS2
return codeS