0

我试图让几个函数一个接一个地运行,但我的代码一直卡在一个循环中。正如该线程multiprocessing中的某人所推荐的那样,我已经尝试实施,但这没有帮助。

我的函数向 Clarifai 发送一张照片以获取与所述照片相关的关键字列表,然后如果所述列表包含与局部变量匹配的单词,我告诉 PyAutoGUI 单击屏幕上的某个位置。这是一个函数的样子:

def p1_click(keyword, p1, app, model):
    p1_response = model.predict_by_filename(filename='/Users/raulrodriguez/CODE6_OS/scripts/captcha/saucissons/p1.png')
    p1_concepts = p1_response['outputs'][0]['data']['concepts']
    for concept in p1_concepts:
        clean_list = list(map(lambda s: s.strip(), concept['name']))
        while any(word == inflection.singularize(keyword) for word in concept['name'].split()) == True:
            pyautogui.click(x=490, y=385)
            break

if __name__=='__main__':
    p1 = Process(target=p1_click(keyword, p1, app, model))
    p1.start()

显然,我正在尝试对几张照片(准确地说是 10 张)执行此操作,方法是复制前面的代码并替换p1照片的编号(即p2_click……p2.start()对于名为 的照片),并更改运算符p2的坐标值pyautogui.click. 然而,问题是,当我把所有东西放在一起时,我的光标移动到pyautogui.click有匹配的照片的坐标并不停地点击。我打算进行连锁反应,程序点击一次匹配照片,然后继续下一张。如果有人愿意插话,我将非常感谢您的帮助。

4

1 回答 1

1

您面临的问题在此代码中:

if __name__=='__main__':
    p1 = Process(target=p1_click(keyword, p1, app, model))
    p1.start()

特指这一行p1 = Process(target=p1_click(keyword, p1, app, model))。更具体地说target=p1_click(keyword, p1, app, model)。当您执行此操作时p1_click,一旦您将其分配给 ,就会调用该函数target

这不是您通过multiprocessing模块调用方法并传递参数的方式。要在多处理模块中传递参数,请执行以下操作:

p1 = Process(target=p1_click, args=(keyword, p1, app, model))

您可以在此 SO 答案中获取有关多处理以及如何使用它的更多信息

于 2017-12-16T15:10:11.650 回答