我试图让几个函数一个接一个地运行,但我的代码一直陷入循环中。我已经尝试过实施multiprocessing
,就像this thread推荐的那样,但这并没有帮助。
我的函数向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
坐标,这个坐标有一个匹配并且不断点击。我打算进行连锁反应,程序点击匹配照片一次,然后继续进行下一次。如果有人愿意接受,我会非常感谢你的帮助。
您遇到的问题是在此代码中:
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))
您可以获得有关多处理以及如何在this SO answer中使用它的更多信息