- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我对 asyncio 的工作原理仍然很困惑,所以我试图设置一个简单的示例但无法实现。
以下示例是一个 Web 服务器 (Quart),它接收到生成大型 PDF 的请求,然后服务器在开始处理 PDF 之前返回一个响应,然后开始处理它,稍后将下载链接发送到电子邮件中。
from quart import Quart
import asyncio
thời gian nhập khẩu
app = Quart(__name__)
@app.route('/')
async def pdf():
t1 = time.time()
await generatePdf()
return 'Time to execute : {} seconds'.format(time.time() - t1)
async def generatePdf():
await asyncio.sleep(5)
#sync generatepdf
#send pdf link to email
app.run()
我该怎么做?在上面的示例中,我不希望在返回之前等待 5 秒。
我什至不确定 asyncio 是否是我需要的。
而且我担心在响应返回后阻止服务器应用程序不是应该做的事情,但也不确定。
pdf 库也是同步的,但我想这是另一天的问题......
câu trả lời hay nhất
评论包含您响应网络请求和安排稍后生成 pdf 所需的一切。
asyncio.create_task(generatePdf())
但是,如果 pdf 处理缓慢,则不是一个好主意,因为它会阻塞异步事件线程。即当前请求将得到快速响应,但后续请求必须等到 pdf 生成完成。
正确的方法是在执行器中运行任务(尤其是 ProcessPoolExecutor )。
from quart import Quart
import asyncio
thời gian nhập khẩu
from concurrent.futures import ProcessPoolExecutor
app = Quart(__name__)
executor = ProcessPoolExecutor(max_workers=5)
@app.route('/')
async def pdf():
t1 = time.time()
asyncio.get_running_loop().run_in_executor(executor, generatePdf)
# await generatePdf()
return 'Time to execute : {} seconds'.format(time.time() - t1)
def generatePdf():
#sync generatepdf
#send pdf link to email
app.run()
重要的是要注意,因为它在不同的进程中运行,generatePdf
不能在没有同步的情况下访问任何数据。所以在调用函数时传递函数需要的一切。
gia hạn
如果您可以重构 generatePdf
函数并使其异步,则效果最佳。
生成 pdf 的例子
def generatePdf():
image1 = downloadImage(image1Url)
image2 = downloadImage(image2Url)
data = queryData()
pdfFile = makePdf(image1, image2, data)
link = upLoadToS3(pdfFile)
sendEmail(link)
您可以像这样使函数异步:
async def generatePdf():
image1, image2, data = await asyncio.gather(downloadImage(image1Url), downloadImage(image2Url), queryData())
pdfFile = makePdf(image1, image2, data)
link = await upLoadToS3(pdfFile)
await sendEmail(link)
注意:所有辅助函数,如downloadImage
、queryData
都需要重写以支持không đồng bộ
。这样,即使数据库或图像服务器很慢,请求也不会被阻止。一切都在同一个异步线程中运行。
如果它们中的一些还不是异步的,那么它们可以与 run_in_executor
一起使用,并且应该可以很好地与其他异步函数一起使用。
关于Python asyncio 跳过处理直到函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54370505/
Đối với Metal, nếu tôi ánh xạ kết cấu chính, tôi có cần ánh xạ kết cấu nhiều mẫu không? Tôi đã đọc tài liệu của Apple nhưng không nhận được bất kỳ thông tin liên quan nào. Câu trả lời hay nhất cho Mipmapping là câu trả lời bạn sẽ sử dụng
Mã tôi đang làm việc có Bộ điều khiển hiển thị GSP (Trang máy chủ Groovy) trong mã Groovy phụ trợ. Đối với giao diện người dùng, chúng tôi sử dụng React-router v4 để xử lý việc định tuyến. Vấn đề tôi đang gặp phải là, bởi
Chúng tôi đang xây dựng một trang web lớn. Chúng tôi đang xem xét nên thực hiện xử lý HTML ở phía máy chủ (ASP .Net) hay phía máy khách. Ví dụ: chúng tôi có các tệp HTML hoạt động giống như các mẫu để tạo tab. Nhận HT ở phía máy chủ
Tôi đang cố tải một hình ảnh vào một mảng trong void setup() nhưng khi thực hiện, tôi gặp lỗi này: xử lý "Loại không khớp, 'process.core.PImage' không khớp".
Tôi đang cố cập nhật thẻ khách hàng trên Shopify bằng ứng dụng riêng của họ. Tôi đã thử với người đưa thư và mọi thứ đều hoạt động tốt nhưng thông qua AJAX, tôi phải gọi lại thành công thay vì lỗi nhưng sau khi thành công, tôi nhận được liên kết xác thực thay thế
Làm cách nào để thay đổi biểu tượng mặc định được xuất bằng Đang xử lý appIconTest.exe trong ứng dụng cửa sổ? Mặc định: Câu trả lời hay nhất Sau một số nghiên cứu, giải pháp đơn giản nhất tôi có thể tìm thấy là: Đi vào ...\process
Tôi đã tạo một trò chơi nhỏ đơn giản trong Đang xử lý nhưng cần sự giúp đỡ. Tôi có một bản mp3 và muốn thêm nó vào ứng dụng của mình để lặp trong nền. Điều này có thể thực hiện được không? Cảm ơn bạn rất nhiều. Câu trả lời hay nhất Bạn có thể sử dụng thư viện âm thanh. Quá trình xử lý đã được bao gồm
Tôi có một số nút được tạo như thế này: Trong setup() PImage[] imgs1 = {loadImage("AREA1_1.png"),loadImage("AREA1_2.png"),loadImage
Tôi đang cố gắng tạo trò chơi nhiều người chơi bằng Xử lý nhưng không thể tìm ra cách chia màn hình thành hai để hiển thị các tình huống khác nhau cho người chơi? Giống như trong C# chúng ta có Viewport leftViewport, rightView
Tôi đã cố gắng sử dụng Vùng lân cận Moore để tạo các ô tự động di động trong quá trình xử lý và cho đến nay nó đã rất thành công. Tôi đã cố gắng làm cho hệ thống cơ bản hoạt động được và bây giờ tôi muốn nó hoạt động bằng cách thêm các tính năng khác nhau. Bây giờ, tôi kiểm tra xem các tế bào có còn sống hay không. Nếu vậy, tôi sử dụng điền
Có cách nào để kiểm tra việc sử dụng tài nguyên bằng mã JavaScript không? Tôi có thể kiểm tra mức sử dụng RAM và mức sử dụng CPU của tập lệnh không? Vì có nhiều cách để làm điều gì đó nên tôi có thể viết mã bằng các phương pháp khác nhau và lưu nó thành hai tệp khác nhau,
Tôi đang cố gắng tìm ra cách xử lý một danh sách như thế này: [ [[4,6,7], [1,2,4,6]] , [[10,4,2,4], [1] ] ] Đây là Danh sách các số nguyên. Tôi muốn hàm của mình lấy danh sách này làm đầu vào và trả về các số nguyên không trùng lặp trong danh sách
Có cách nào để xử lý MethodChannel/EventChannel khi không cần thiết không? Tôi hỏi vì tôi muốn tạo nhiều phương thức/kênh sự kiện cho một đối tượng. Ví dụ: lớp Gọi { ... trường
Tôi có câu hỏi về cách xử lý ConnectionResetError trong Python3. Điều này thường xảy ra khi tôi sử dụng hàm urllib.request.Request. Tôi muốn biết nếu chúng tôi gặp phải lỗi như thế này thì có được không
Tôi đã cố gắng tìm ra điều này trong vài giờ nhưng vô ích. Mã rất đơn giản, một quả bóng nảy (hạt). Việc khởi tạo vận tốc của hạt thành (0, 0) sẽ khiến nó nảy lên và xuống. Thay đổi vận tốc ban đầu của hạt thành (0, 0,01) hoặc bất kỳ số dấu phẩy động thập phân nào
Tôi đã tự làm mình rối tung lên. Tôi muốn thêm python3.6 vào hệ thống của mình nên tôi quyết định gỡ cài đặt cái hiện có trong Ubuntu 19.10. Nhưng bây giờ mỗi lần tôi muốn cài đặt thứ gì đó tôi lại gặp lỗi này: dpkg: error w
Tôi đang gặp khó khăn với chức năng NA trong gói Rpart. Tôi đã nhận được khung dữ liệu sau (mã bên dưới) Kết quả VarA VarB 1 1 1 0 2 1 1 1
Tôi đang sử dụng Java với JSF, là vùng chứa Glassfish 3. Trong ứng dụng web của mình, tôi đang cố gắng triển khai hệ thống quản lý tệp (hình ảnh). Tôi có một config.properties mà tôi đọc được từ quá trình tải lên
Vì vậy, tôi đã làm việc về Xử lý được vài tuần và mặc dù tôi không có kinh nghiệm lập trình nhưng tôi đã chuyển sang các dự án phức tạp hơn. Tôi đang viết một trình mô phỏng tiến hóa sinh ra các sinh vật có thuộc tính ngẫu nhiên. Cuối cùng, tôi sẽ thêm các bản sao, nhưng hiện tại các sinh vật chỉ lơ lửng trên màn hình
Có ai biết Delphi 2009 xử lý "với" khác nhau như thế nào không? Tôi đã giải quyết được sự cố ngày hôm qua bằng cách giải mã "with" thành tham chiếu đầy đủ như "với Datamodule, Dataset, MainForm".
Tôi là một lập trình viên xuất sắc, rất giỏi!