@GenericSnake . , , , , GIL:
CPython, - Global Interpreter Lock, Python ( ). , , . , Threading - , , I/O .
, , , , secondThread mainThread, , (, , , browser.quit(), ):
import time
from splinter import Browser
from multiprocessing import Process
import os
os.environ['PATH'] = os.environ[
'PATH'] + "path/to/geckodriver" + "path/to/firefox/binary"
start_time = time.time()
urlOne = 'http://pythoncarsecurity.com/Support/FAQ.aspx'
urlTwo = 'http://pythoncarsecurity.com/Products/'
def url_visitor(url):
print("url called: " + url)
browser = Browser('firefox')
print('STARTING REQUEST TO: ' + url + " at "+ str(time.time() - start_time))
browser.visit(url)
print('END REQUEST TO: ' + url + " at "+ str(time.time() - start_time))
def main():
p1 = Process(target=url_visitor, args=[urlTwo])
p2 = Process(target=url_visitor, args=[urlOne])
p1.start()
p2.start()
p1.join()
p2.join()
if __name__=="__main__":
main()
( ):
url called: http://pythoncarsecurity.com/Support/FAQ.aspx
url called: http://pythoncarsecurity.com/Products/
STARTING REQUEST TO: http://pythoncarsecurity.com/Support/FAQ.aspx at 10.763000011444092
STARTING REQUEST TO: http://pythoncarsecurity.com/Products/ at 11.764999866485596
END REQUEST TO: http://pythoncarsecurity.com/Support/FAQ.aspx at 16.20199990272522
END REQUEST TO: http://pythoncarsecurity.com/Products/ at 16.625999927520752
. Selenium , , , , - url_visitor, , . , (, , ), . :
import time
from splinter import Browser
import threading
from threading import Lock
import os
os.environ['PATH'] = os.environ[
'PATH'] + "/path/to/chromedriver"
start_time = time.time()
urlOne = 'http://pythoncarsecurity.com/Support/FAQ.aspx'
urlTwo = 'http://pythoncarsecurity.com/Products/'
browser = Browser('chrome')
lock = threading.Lock()
def init():
browser.visit("https://www.google.fr")
driver = browser.driver
driver.execute_script("window.open('{0}', '_blank');")
tabs = driver.window_handles
def url_visitor(url, tabs):
with lock:
if tabs != 0:
browser.driver.switch_to_window(browser.driver.window_handles[tabs])
print("url called: " + url)
print('STARTING REQUEST TO: ' + url + " at "+ str(time.time() - start_time))
browser.visit(url)
print('END REQUEST TO: ' + url + " at "+ str(time.time() - start_time))
browser.quit()
def main():
p1 = threading.Thread(target=url_visitor, args=[urlTwo, 0])
p2 = threading.Thread(target=url_visitor, args=[urlOne, 1])
p1.start()
p2.start()
if __name__=="__main__":
init()
main()