[Python-遅延/ブロックエラー]Pythonスクリプトを実行すると、print関数の出力が遅延します

Pythonスクリプトを実行すると、print関数の出力遅延の問題が発生します

1.問題の説明

最近Pythonクローラーを作成したとき、デバッグにprint関数の出力を使用しました。seleniumを介してchromedriver.exeを呼び出して実行すると、次のような非常に厄介な問題が発生しました。つまり、印刷の出力が遅延しました。 :

import io
import random
import re
import sys
import time
import os
from datetime import datetime

import pandas as pd
import xlwt
from pyquery import PyQuery as pq
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.support.ui import WebDriverWait

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')  # 痛苦的根源

print("你好")
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
html = driver.page_source  # 获取页面数据
print(html)

通常の状況では、最初に「Hello」を出力してからBaiduページにアクセスする必要があります。つまり、最初の印刷が2番目の印刷の前に表示され、次にコンソールが表示されますが、実際の状況では、しばらくするとプログラムが終了します。特に複数のメソッドが呼び出され、アクセス時間が長い場合、2つのプリントが一緒に出力されると、遅延が長くなり、異常になります。

2.ソリューション

これは小さな問題ですが、非常に厄介です。問題の原因は、コードの最初でstdoutバッファリングを有効にしたことです。これは、別のバグを解決するために有効になりました。
実際に穴を埋め、次に別の穴を埋めました。
2つの解決策があります
。1。1つは、コマンドラインパラメーター-uを使用してPythonを起動し、stdoutバッファリングを無効にすることです。

python3 -u test.py  # 改成你的Python文件名称

2.上記のコードをコメントアウトします

# 注意开启此项时会造成print数据阻塞,注释掉
# sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030')

3.参考記事

https://blog.csdn.net/u012973744/article/details/18825123
https://blog.csdn.net/lmb1612977696/article/details/78648148

おすすめ

転載: blog.csdn.net/Artificial_idiots/article/details/121493891