同时运行刮板蜘蛛和进度条

时间:2020-06-13 19:59:19

标签: python multithreading scrapy progress-bar

我正在尝试在我的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

0 个答案:

没有答案