连续执行Python中的函数

时间:2017-12-16 11:39:31

标签: python python-3.x multiprocessing pyautogui clarifai

我正在尝试让几个函数一个接一个地运行,但是我的代码一直停留在循环中。我已尝试实施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 ... { {1}}用于名为p2.start()的照片,并更改p2运算符的坐标值。然而,问题在于,当我把所有东西放在一起时,我的光标会移动到照片的pyautogui.click坐标,这些坐标有一个匹配并且不断点击。我打算进行连锁反应,程序点击匹配照片一次,然后继续进行下一次。如果有人愿意接受,我会非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您遇到的问题在于此代码:

<body>
  <h1 id='display'></h1>
  <div id='keypad'>
    <div class='row'>
      <button onclick='updateDisplay(1)'>1</button>
      <button onclick='updateDisplay(2)'>2</button>
      <button onclick='updateDisplay(3)'>3</button>
      <button onclick='setOperator("+")'>+</button>
    </div>
    <div class='row'>
      <button onclick='updateDisplay(4)'>4</button>
      <button onclick='updateDisplay(5)'>5</button>
      <button onclick='updateDisplay(6)'>6</button>
      <button onclick='setOperator("-")'>-</button>
    </div>
    <div class='row'>
      <button onclick='updateDisplay(7)'>7</button>
      <button onclick='updateDisplay(8)'>8</button>
      <button onclick='updateDisplay(9)'>9</button>
      <button onclick='setOperator("/")'>/</button>
    </div>
    <div class='row'>
      <button onclick='updateDisplay(".")'>.</button>
      <button onclick='updateDisplay(0)'>0</button>
      <button onclick='clearScreen()'>X</button>
      <button onclick='setOperator("*")'>*</button>
    </div>
    <div class='row'>
      <button onclick='calculate()'>=</button>
    </div>
  </div>
</body>

特别是这一行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

中获取有关多处理以及如何使用它的更多信息