IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 解决Pycharm 多线程时出现错误Process finished with exit code -1073741819 (0xC0000005) -> 正文阅读

[Python知识库]解决Pycharm 多线程时出现错误Process finished with exit code -1073741819 (0xC0000005)

港真,这个问题整的我快抑郁了,排雷花了三四天时间,网上说啥的都有。先说结论吧,最终的解决方案是把代码里用到的pandas库降低了版本,用的1.1.5版本,才没再次报该错误。教训就是:即使是python库,也尽量不要用最新版,因为不知道哪里会产生奇奇怪怪的bug!用新版本后面的比较稳定的老版本,起码非常稳定!

接下来细说。

事情是这样,客户要求给他写个脚本,然后因为请求量大,所以用threading多线程搞比较好一些,一次性开10000个线程+ip随机切换,起码不会被封本地ip。接下来先上部分代码。

import codecs
import csv
import os
import random
import sha3
import ecdsa
from web3 import Web3
import threading
import time
import smtplib
from email.header import Header
from email.mime.text import MIMEText
import pandas as pd
import requests
from bs4 import BeautifulSoup

# 从该网站不定时抓取可用ip地址,并单独作为一个线程使用
def getip():
    try:
        for i in range(1, 10):
            if len(list(set(ip_url_list))) < 3000:
                url = 'https://www.kuaidaili.com/free/inha/' + str(i) + '/'
                headers = {}
                re = requests.get(url, headers=headers)
                soup = BeautifulSoup(re.text, 'html.parser')
                ip_datas = soup.find('table')
                df_tables = pd.read_html(str(ip_datas))
                for j in range(len(df_tables)):
                    df = df_tables[j]
                    df_ip_list = df['IP'].tolist()
                    df_port_list = df['PORT'].tolist()
                    df_http_type = df['类型'].tolist()
                    if len(df_ip_list) == len(df_port_list):
                        for i in range(len(df_ip_list)):
                            ip_url = df_http_type[i].lower() + '://' + str(df_ip_list[i]) + ':' + str(df_port_list[i])
                            ip_url_list.append(ip_url)
                print('ip_url_list:{} \n ip_url_list列表长度:{} '.format(list(set(ip_url_list)),len(list(set(ip_url_list)))))
                # df_ips = pd.DataFrame(list(set(ip_url_list)))       # 列表去重
                # df_ips.to_csv('IP代理地址.csv', encoding='utf-8', index=False)
                time.sleep(random.randint(60, 120))
    except BaseException:
        pass

# 核心代码不放了,因为与最终的报错无关,需要全部代码请私信哈

if __name__ == "__main__":

    # 启动IP代理线程
    ip_thread = threading.Thread(target=getip)
    ip_thread.start()

    # 私钥碰撞线程表
    threads = []
    for i in range(10000):
        thread = threading.Thread(target=hit_key)
        threads.append(thread)
    for t in range(len(threads)):
        threads[t].start()
        # threads[t].join(10)        # 保证内存稳定
        # threads.remove(threads[t])    # 保证内存稳定

起初,当产生这个报错的时候,我谷歌了一下,结果是说啥的都有,全部试了一遍,都没一点用处。只能放弃。————放弃一次😂

后来我注意到报错信息里有这么一条:

_PyEval_EvalFrameDefault returned a result with an error set

谷歌了一下发现一样说啥的都有,而且解决方案很少,全网找不到可用的解决方案。只能放弃。————放弃两次😂

紧接着我又仔细阅读了报错信息,发现一个Unable set什么的错误,但把多线程加到10000后,这个错误很常见————放弃三次😂

然后我把windows电脑的.py文件拷贝到mac电脑,发现代码能正常运行,一切正常,这就基本说明了是windows电脑配置、环境或者pycharm库的问题。

为了避免是多线程库带来的问题,我把if下面的所有代码注释掉,使用while 1循环来处理,看看不用threading会不会报错,结果发现如果不用多线程,在windows上运行一切正常。

if __name__ == "__main__":
    """
    # 启动IP代理线程
    ip_thread = threading.Thread(target=getip)
    ip_thread.start()

    # 私钥碰撞线程表
    threads = []
    for i in range(10000):
        thread = threading.Thread(target=hit_key)
        threads.append(thread)
    for t in range(len(threads)):
        threads[t].start()
        # threads[t].join(10)        # 保证内存稳定,防止线程内存增加
        # threads.remove(threads[t])    # 保证内存稳定,防止线程内存增加
    """
    while 1:
    	hitkey()

这就奇怪了,这说明在windows上,threading这个库可能和其他库冲突了,因为不用threading的时候一切正常。

直到今晚,想起来对比一下mac电脑上的pycharm里的库的版本和windows上的,先把numpy库版本降下来,运行时提示必须提高numpy版本才能用当前版本的pandas,然后我就把pandas的版本又换成和mac的一样,点击运行,发现终于不报错了!!

以上就是解决这个报错的心路历程,一度给我整的快哭了,尤其是同样的代码在mac上正常运行,windows上一直报错。😭

最终结论:
如果使用pycharm运行代码报 Process finished with exit code -1073741819 (0xC0000005) 错误,优先对代码里相关的引用库进行版本降级,大概率能解决问题。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:28:59  更:2022-10-17 12:32:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 1:58:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计