웹 애플리케이션의 일부 작업의 경우 완료하는 데 시간이 오래 걸리거나 실행 시간을 확인할 수 없습니다. 이러한 작업의 경우 사용자가 서버가 요청을 수신했다는 사실만 알고 요청의 실행 결과를 즉시 얻을 필요가 없다면 이를 비동기적으로 처리할 수 있습니다. 웹 사이트 성능을 최적화하기 위해 캐시를 사용하는 것이 첫 번째로 중요한 것이라면, 시간이 걸리거나 실행 시간이 불확실한 작업을 비동기화하는 것은 웹 사이트 성능을 최적화하기 위해 두 번째로 중요한 것입니다. 간단히 말해서, 연기할 수 있는 일은 즉시 수행해서는 안 됩니다.
이전 장에서는 문자 메시지 보내기와 클라우드 저장소에 파일 업로드를 예로 들었습니다. 이 두 작업 중 전자는 시간이 불확실한 작업(호출자로서 타사 플랫폼의 응답 시간을 확인할 수 없기 때문에)이고, 후자는 시간이 많이 걸리는 작업(파일이 크거나 타사 플랫폼이 불안정하면 업로드하는 데 시간이 오래 걸릴 수 있습니다.) 분명히 두 작업 모두 비동기식일 수 있습니다.
Python 프로젝트에서는 멀티스레딩을 사용하거나 타사 라이브러리 Celery를 사용하여 비동기 처리를 달성할 수 있습니다.
Celery는 비동기 작업 처리를 쉽게 완료할 수 있는 Python 비동기 작업 대기열/메시지 대기열입니다. Celery를 사용하면 단일 프로세스, 다중 프로세스 또는 다중 호스트일 수 있는 여러 작업 실행자에 작업을 배포할 수 있습니다. Celery는 작업 우선순위, 작업 결과 저장, 작업 재시도 및 기타 기능도 지원합니다.
Celery를 사용하여 비동기화를 구현하려면 다음 단계가 필요합니다.
Celery 설치
pip install celery
프로젝트에서 Celery 애플리케이션 만들기
from celery import Celery app = Celery('tasks', broker='pyamqp://guest@localhost//')
작업 정의
@app.task def add(x, y): return x + y
프로젝트에서 작업 호출
result = add.delay(4, 4) print(result.get(timeout=1))
Python의 threading
모듈을 사용하여 멀티 스레드를 만들 수 있습니다. 멀티스레딩을 사용하면 시간이 많이 걸리는 작업을 메인 스레드의 실행에 영향을 주지 않고 새 스레드에서 실행할 수 있습니다. threading
模块可以用来创建多线程。使用多线程可以将耗时的任务放在新线程中执行,从而不会影响主线程的执行。
使用多线程实现异步化需要以下步骤:
导入 threading
模块
import threading
定义一个函数作为任务
def task(): print('Hello from task')
创建一个新线程并启动它
t = threading.Thread(target=task) t.start()
有些任务需要在特定的时间执行,这时候我们需要使用定时任务。Python 中有多个第三方库可以用来实现定时任务,如 schedule
、APScheduler
等。下面以 APScheduler
为例来讲解如何实现定时任务。
使用 APScheduler
实现定时任务需要以下步骤:
安装 APScheduler
pip install apscheduler
导入 APScheduler
模块
from apscheduler.schedulers.blocking import BlockingScheduler
创建一个 BlockingScheduler
实例并添加任务
def task(): print('Hello from task') scheduler = BlockingScheduler() scheduler.add_job(task, 'interval', seconds=5) scheduler.start()
上述代码会每隔 5 秒执行一次 task
函数。
虽然 Celery 和多线程都可以实现异步化处理,但是它们之间存在一些差异和优缺点。
优点:
可以将任务分发到多个任务执行者中,从而实现任务的负载均衡,提高任务处理的效率。
支持任务的优先级、任务结果的保存、任务的重试等功能。
支持多种消息传输协议,如 AMQP、Redis、RabbitMQ 等。
可以方便地集成到 Django、Flask 等 Web 框架中。
缺点:
安装和配置过程可能会比较繁琐。
可能会增加系统的复杂性。
优点:
实现起来比较简单,不需要安装额外的库。
可以在本地机器上快速地完成任务处理。
缺点:
不能将任务分发到多个任务执行者中,从而无法实现任务的负载均衡。
无法方便地实现任务的优先级、任务结果的保存、任务的重试等功能。
可能会导致系统的性能下降,因为多线程的并发性能有限。
在 Python 中,有多个第三方库可以用来实现定时任务,如 schedule
、APScheduler
等。这些库都有各自的优缺点,我们可以根据具体需求选择合适的库来实现定时任务。
简单易用,只需要调用 schedule
threading
모듈 가져오기
rrreee
예약된 작업schedule
, APScheduler
등과 같이 예약된 작업을 구현하는 데 사용할 수 있는 여러 타사 라이브러리가 있습니다. 예약된 작업을 구현하는 방법을 설명하기 위해 APScheduler
를 예로 들어 보겠습니다.
APScheduler
를 사용하여 예약된 작업을 구현하려면 다음 단계가 필요합니다. 🎜🎜APScheduler
설치🎜🎜🎜pip install apscheduler🎜🎜🎜APScheduler
가져오기 module🎜rrreee 🎜BlockingScheduler
인스턴스 생성 및 작업 추가🎜rrreee🎜위 코드는 5초마다 task
함수를 실행합니다. 🎜🎜셀러리와 멀티스레딩의 비교🎜🎜셀러리와 멀티스레딩 모두 비동기 처리를 구현할 수 있지만 둘 사이에는 몇 가지 차이점과 장점, 단점이 있습니다. 🎜🎜Celery의 장점과 단점🎜🎜장점: 🎜🎜🎜🎜작업을 여러 작업 실행자에게 분산하여 작업 로드 밸런싱을 달성하고 작업 처리 효율성을 향상시킬 수 있습니다. 🎜🎜🎜🎜작업 우선순위, 작업 결과 저장, 작업 재시도 및 기타 기능을 지원합니다. 🎜🎜🎜🎜AMQP, Redis, RabbitMQ 등과 같은 여러 메시지 전송 프로토콜을 지원합니다. 🎜🎜🎜🎜Django 및 Flask와 같은 웹 프레임워크에 쉽게 통합될 수 있습니다. 🎜🎜🎜🎜단점: 🎜🎜🎜🎜설치 및 구성 프로세스가 번거로울 수 있습니다. 🎜🎜🎜🎜 시스템 복잡성이 증가할 수 있습니다. 🎜🎜🎜🎜멀티스레딩의 장점과 단점🎜🎜장점: 🎜🎜🎜🎜구현이 비교적 간단하고 추가 라이브러리를 설치할 필요가 없습니다. 🎜🎜🎜🎜로컬 머신에서 신속하게 작업 처리를 완료할 수 있습니다. 🎜🎜🎜🎜단점: 🎜🎜🎜🎜작업을 여러 작업 실행자에게 배포할 수 없으므로 작업의 로드 밸런싱을 달성할 수 없습니다. 🎜🎜🎜🎜우선순위, 작업 결과 저장, 작업 재시도 등의 작업을 편리하게 구현하는 것은 불가능합니다. 🎜🎜🎜🎜 멀티스레딩은 동시성 성능이 제한되어 있으므로 시스템 성능 저하가 발생할 수 있습니다. 🎜🎜🎜🎜예약된 작업 선택🎜🎜Python에는 schedule
, APScheduler
등과 같이 예약된 작업을 구현하는 데 사용할 수 있는 여러 타사 라이브러리가 있습니다. . 이러한 라이브러리에는 고유한 장점과 단점이 있으며 특정 요구 사항에 따라 예약된 작업을 구현하는 데 적합한 라이브러리를 선택할 수 있습니다. 🎜🎜일정 라이브러리🎜🎜🎜🎜는 간단하고 사용하기 쉽습니다. 예약된 작업을 구현하려면 schedule
함수만 호출하면 됩니다. 🎜🎜🎜🎜 작업의 로드 밸런싱과 작업의 동시 실행을 달성할 수 없습니다. 🎜🎜🎜🎜APScheduler 라이브러리🎜🎜🎜🎜는 BlockingScheduler, BackgroundScheduler, AsyncIOScheduler 등과 같은 여러 스케줄러를 지원합니다. 🎜🎜🎜🎜날짜, 간격, cron, Interval_from_last 등과 같은 여러 트리거를 지원합니다. 🎜작업 동시 실행 및 로드 밸런싱을 지원합니다.
Django 및 Flask와 같은 웹 프레임워크에 쉽게 통합될 수 있습니다.
위 내용은 프로그램 동시성과 실행 효율성을 향상시키기 위해 Python의 비동기 및 예약 작업을 어떻게 사용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!