Python es rápido y hermoso [v1.0.0] [multiproceso]

Python proporciona dos módulos _thread y threading para admitir subprocesos múltiples, pero _thread proporciona soporte de condado original de bajo nivel y un bloqueo simple, generalmente usamos este último para la programación multiproceso

Crea múltiples hilos

Hay dos formas de crear hilos usando el módulo de hilos, uno es llamar al constructor de la clase Thread para crear, y el otro es heredar la clase Thread para crear una clase de hilo

Crear un hilo usando el constructor de clase Thread

La clase Thread tiene el siguiente constructor, que se puede crear directamente al llamarlo
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)

grupo: Especifica el subproceso del grupo de hilos pertenece
objetivo: especifica el método objetivo el hilo para ser programado
args: especifica una tupla, como parámetro de posición de destino especificada es una función de los parámetros pasados
kwargs: especifica un diccionario de palabras clave parámetros La función especificada en forma de pases de destino en el
daemon de parámetros : especifica si el hilo construido es un hilo de fondo

Crea un paso de hilo usando el constructor

  • Llame al constructor de la clase Thread para crear un objeto de hilo, donde la función especificada por el parámetro de destino se usa como el cuerpo de ejecución del hilo
  • Llame al método start () del objeto de hilo para iniciar el hilo
import threading

# 定义一个普通的action函数,该函数准备作为线程执行体
def action(max):
    for i in range(max):
        # 调用threading模块current_thread()函数获取当前线程
        # 线程对象的getName()方法获取当前线程的名字
        print(threading.current_thread().getName() +  " " + str(i))
# 下面是主程序(也就是主线程的执行体)
for i in range(100):
    # 调用threading模块current_thread()函数获取当前线程
    print(threading.current_thread().getName() +  " " + str(i))
    if i == 20:
        # 创建并启动第一个线程
        t1 =threading.Thread(target=action,args=(100,))
        t1.start()
        # 创建并启动第二个线程
        t2 =threading.Thread(target=action,args=(100,))
        t2.start()
print('主线程执行完成!')

args=(100,)Puede ver este parámetro, es un parámetro en forma de tupla y se pasa al cuerpo de ejecución de la función uno por uno según la posición. En este ejemplo, es la función de acción (MAX)

Heredar clase de subproceso para crear la clase de subproceso

Crear paso de hilo heredando la clase de hilo

  • Defina una subclase de la clase Thread y reescriba la función run () de esta clase. La función run () es el cuerpo de ejecución del thread
  • Cree una instancia de la subclase Thread, que es crear un objeto thread
  • Llame al método start () del objeto de subproceso para iniciar el subproceso
import threading

# 通过继承threading.Thread类来创建线程类
class FkThread(threading.Thread):
    def __init__(self):  
        threading.Thread.__init__(self)
        self.i = 0
    # 重写run()方法作为线程执行体
    def run(self):  
        while self.i < 100:
            # 调用threading模块current_thread()函数获取当前线程
            # 线程对象的getName()方法获取当前线程的名字
            print(threading.current_thread().getName() +  " " + str(self.i))
            self.i += 1
# 下面是主程序(也就是主线程的执行体)
for i in range(100):
    # 调用threading模块current_thread()函数获取当前线程
    print(threading.current_thread().getName() +  " " + str(i))
    if i == 20:
        # 创建并启动第一个线程
        ft1 = FkThread()
        ft1.start()
        # 创建并启动第二个线程
        ft2 = FkThread()
        ft2.start()
print('主线程执行完成!')

Interfaz de llamadas multiproceso

# -*- coding: utf-8 -*-
import threading
import requests
from time import ctime
import json



def syc_owen():
    """syc_owen"""

    print("Start synchronizing %s %s" % ("owen", ctime()))
    parameter = {"userId":"1263","userName":"13810078954","enterpriseId":"10330","flag":"sended"}
    request_own = requests.put("https://xxxxxx.leadscloud.com/mail/receiveSendedAndRubbishMail", data=parameter)
    data = request_own.json()
    print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) )
    print("接口调用已经返回结果,本次同步结束")

def syc_grace():
    """syc_grace"""

    print("Start synchronizing %s %s" % ("grace", ctime()))
    parameter = {"userId":"1294","userName":"13810327625","enterpriseId":"10330","flag":"sended"}
    request_own = requests.put("https://xxxxxx.leadscloud.com/mail/receiveSendedAndRubbishMail", data=parameter)
    data = request_own.json()
    print(json.dumps(data, indent=4, sort_keys=True, ensure_ascii=False) )
    print("接口调用已经返回结果,本次同步结束")

syc_email_threads = []  # 定义线程列表,然后逐一将线程放进列表最后加载线程列表执行
owen_thread = threading.Thread(target=syc_owen)
syc_email_threads.append(owen_thread)

grace_thread = threading.Thread(target=syc_grace)
syc_email_threads.append(grace_thread)


if __name__ == '__main__':
    for threademail in syc_email_threads:
        threademail.start() # 启动线程活动
    for threademail in syc_email_threads:
        threademail.join() # 等待线程终止

Navegador multiproceso instancia uno

Código de subproceso único

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 24 11:45:55 2019

@author: davieyang
"""
from selenium import webdriver  # 引入webdriver
from time import sleep  # 从time模块引入sleep 
from time import ctime  # 从time模块引入ctime


def start_chrome():  # 定义启动谷歌浏览器的方法
    print("starting chrome browser now! %s" % ctime())  # 控制台打印当前时间 
    chrome_driver = webdriver.Chrome()
    chrome_driver.get("http://www.baidu.com") #打开百度主页
    sleep(2)
    chrome_driver.quit()

def start_firefox():  # 定义启动火狐浏览器的方法
    print("starting firefox browser now! %s" % ctime())  # 控制台打印当前时间
    fire_driver = webdriver.Firefox()
    fire_driver.get("http://www.baidu.com") #打开百度主页
    sleep(3)
    fire_driver.quit()

def start_ie():  # 定义启动IE浏览器的方法
    print("starting ie browser now! %s" %ctime())  # 控制台打印当前时间
    ie_driver = webdriver.Ie()
    ie_driver.get("http://www.baidu.com")  #打开百度主页
    sleep(5)
    ie_driver.quit()

if __name__ == '__main__':
    start_chrome()
    start_firefox()
    start_ie()
    print(u"全部结束 %s" %ctime())

Código multiproceso

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 24 19:23:25 2019
@author: davieyang
"""

from selenium import webdriver
from time import sleep
from time import ctime
import threading


def start_chrome():  # 定义启动谷歌浏览器的方法
    print("starting chrome browser now! %s" % ctime())
    chrome_driver = webdriver.Chrome()
    chrome_driver.get("http://www.baidu.com")
    sleep(2)
    chrome_driver.quit()


def start_firefox():  # 定义启动火狐浏览器的方法
    print("starting firefox browser now! %s" % ctime())
    fire_driver = webdriver.Firefox()
    fire_driver.get("http://www.baidu.com")
    sleep(3)
    fire_driver.quit()


def start_ie():  # 定义启动IE浏览器的方法
    print("starting ie browser now! %s" % ctime())
    ie_driver = webdriver.Ie()
    ie_driver.get("http://www.baidu.com")
    sleep(5)
    ie_driver.quit()
    
    
threading_list = []  #创建一个空列表用于存储线程
# 定义一个执行start_chrome()方法的线程
chrome_thread = threading.Thread(target=start_chrome)
threading_list.append(chrome_thread)  # 将线程放到列表中

# 定义一个执行start_firefox()方法的线程
firefox_thread = threading.Thread(target=start_firefox)
threading_list.append(firefox_thread)  # 将线程放到列表中
'''
# 定义一个执行start_chrome()方法的线程
ie_thread = threading.Thread(target=start_ie)  
threading_list.append(ie_thread)  # 将线程放到列表中
'''

if __name__ == '__main__':
    for start_thread in threading_list:
        start_thread.start()
    for start_thread in threading_list:
        start_thread.join()
    print(u"全部结束 %s" % ctime())

Multi-thread start browser dos

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 24 20:19:59 2019

@author: davieyang
"""
from selenium import webdriver
from time import sleep
from time import ctime
import threading

def start_browser(browser, time):
    if browser == "chrome":
        print("starting chrome browser now! %s" % ctime())  # 控制台打印当前时间 
        chrome_driver = webdriver.Chrome()
        chrome_driver.get("http://www.baidu.com") #打开百度主页
        sleep(time)
        chrome_driver.quit()
    elif browser == "firefox":
        print("starting firefox browser now! %s" % ctime())  # 控制台打印当前时间
        fire_driver = webdriver.Firefox()
        fire_driver.get("http://www.baidu.com") #打开百度主页
        sleep(time)
        fire_driver.quit()
    else: 
        print("starting ie browser now! %s" %ctime())  # 控制台打印当前时间
        ie_driver = webdriver.Ie()
        ie_driver.get("http://www.baidu.com")  #打开百度主页
        sleep(time)
        ie_driver.quit()
browser_dict = {"chrome":3,"firefox":4,"ie":5}
start_browser_threading = []
for browser, time in browser_dict.items():
    threading_browser = threading.Thread(target = start_browser, args = (browser, time))
    start_browser_threading.append(threading_browser)

if __name__ == '__main__':
    for threading_browser in range(len(browser_dict)):
        start_browser_threading[threading_browser].start()
    for threading_browser in range(len(browser_dict)):
        start_browser_threading[threading_browser].join()
    print(u"全部结束 %s" %ctime())

214 artículos originales publicados · Me gustaron 183 · Visitantes más de 100,000

Supongo que te gusta

Origin blog.csdn.net/dawei_yang000000/article/details/105609689
Recomendado
Clasificación