我有一个要求,我在运行一个selenium脚本,在一台机器上打开2个Firefox实例。我想在同时截取两个实例的屏幕截图。同时部分很重要。
我使用以下步骤来模拟这个:
if (response == null || response.StatusCode != HttpStatusCode.OK)
return DictionaryPIResponseNullFound.Value;
以下是python脚本: 的 screenshot99.py
Xvfb -ac :99 and Xvfb -ac :100
和 screenshot100.py
#!/usr/bin/env python
from pyvirtualdisplay import Display
from selenium import webdriver
import os
os.environ['DISPLAY'] = ':99'
display = Display(visible=0, size=(800, 600))
display.start()
browser = webdriver.Firefox()
browser.get('http://www.test.com')
browser.quit()
display.stop()
我有两个问题:
答案 0 :(得分:1)
你可以创建一个bash文件告诉在后台生成两个进程,这可以保证你的并发性,但不能保证并行性。
python screenshot99.py &
python screenshot100.py &
您可以使用multiprocessing模块创建旋转门锁 -
编辑 - 我应该指定甚至这不能保证并行性,但这更接近。如果需要,您必须指定要运行的CPU。
from multiprocessing import Process, Value
import time
def f(i, counter):
counter.value += 1
while counter.value != 2 :
print 'aquiring...'
#### CRITICAL SECTION ####
# spawn your script here using the os module or
# just write the code in here
print int(round(time.time() * 1000)), i
#### CRITICAL SECTION END ####
if __name__ == '__main__':
counter = Value('i', 0)
for num in range(2):
Process(target=f, args=(num, counter)).start()
结果 -
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
aquiring...
1487866323038 0
1487866323038 1
我重复多次(只显示时间) -
1487866388886 0
1487866388886 1
再次 -
1487866398492 0
1487866398492 1