Python 3.8.2 в VS Code Error - не удалось подключиться - в start_client - PullRequest
4 голосов
/ 27 февраля 2020

У меня есть многопоточная программа, на которой я работаю:

  • Windows 10 PRO x64
  • Python 3.8.2 ( x64) (Python 3.8.2 (теги / v3.8.2: 7b3ab59, 25 февраля 2020, 23:03:10) [MS C v.1916 64 бит (AMD64)] на win32)
  • также попробуйте Python 3.8.0 с той же ошибкой
  • VS Code (x64) 1.43.0
  • ms- python расширение для кода VS (ms- python. python -2020.2.64397)

Я получил эту ошибку:

Could not connect to 127.0.0.1: 63323
Could not connect to 127.0.0.1: 63323
Traceback (most recent call last):
Traceback (most recent call last):
  File "c:\Users\test\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\no_wheels\ptvsd\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 514, in start_client
    s.connect((host, port))
ConnectionRefusedError: [WinError 10061] No connection could be established because the target computer actively rejected it
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "c:\Users\test\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\no_wheels\ptvsd\_vendored\pydevd\_pydevd_bundle\pydevd_comm.py", line 514, in start_client
    s.connect((host, port))
ConnectionRefusedError: [WinError 10061] No connection could be established because the target computer actively rejected it
Traceback (most recent call last):
  File "c:\Users\test\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\no_wheels\ptvsd\_vendored\pydevd\pydevd.py", line 2536, in settrace
  File "<string>", line 1, in <module>
  File "c:\Users\test\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\no_wheels\ptvsd\_vendored\pydevd\pydevd.py", line 2536, in settrace
Could not connect to 127.0.0.1: 63323
    _locked_settrace(
    _locked_settrace(  File "c:\Users\test\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\no_wheels\ptvsd\_vendored\pydevd\pydevd.py", line 2610, in _locked_settrace
Could not connect to 127.0.0.1: 63323

В этом приложении я использую:

import functions as fnc
from multiprocessing import freeze_support

из файла functions.py:

import sys
import csv
import time
import datetime
import argparse
import itertools as it
from os import system, name
from enum import Enum, unique
from tqdm import tqdm
from math import ceil
from multiprocessing import Pool, cpu_count
import codecs

Программы отлично работают на другом P C с Python 3.8.0, тогда я не понимаю этой ошибки

Эта программа сравнивает только 2 файла и показывает diff, они не используют никакого соединения с другим сервером или целыми rnet


Единственное отличие состоит в том, что я сейчас использую Intel i9-9900 (8c / 16t), а на втором компьютере - i5-7500 только с 4 ядрами


EDIT

Когда я устанавливаю количество ядер равным 8 из 16, программы запускаются без ошибок. Мой процессор имеет 8 физических и 16 логических ядер, и я использую cpu_count () для проверки номера процессора, например:

threads = 8 #cpu_count()
p = Pool(threads)

В чем проблема?


РЕДАКТИРОВАТЬ - 09/03/2020 - КОД ИСТОЧНИКА

main.py

import functions as fnc
from multiprocessing import freeze_support


# Run main program
if __name__ == '__main__':
    freeze_support()

    fnc.main()

functions.py

import sys
import csv
import time
import datetime
import argparse
import itertools as it
from os import system, name
from enum import Enum, unique
from tqdm import tqdm
from math import ceil
from multiprocessing import Pool, cpu_count
import codecs


# ENUM
@unique
class Type(Enum):
    TT = 1


# CLASS
class TextFormat:
    PURPLE = '\033[95m'
    CYAN = '\033[96m'
    DARKCYAN = '\033[36m'
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    RED = '\033[91m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'
    END = '\033[0m'


class CrossReference:
    def __init__(self, pn, comp, comp_name, type, diff):
        self.pn = pn
        self.comp = comp
        self.comp_name = comp_name
        self.type = type
        self.diff = diff

    def __str__(self):
        return f'{self.pn} {get_red("|")} {self.comp} {get_red("|")} {self.comp_name} {get_red("|")} {self.type} {get_red("|")} {self.diff}\n'

    def __repr__(self):
        return str(self)

    def getFullRow(self):
        return self.pn + ';' + self.comp + ';' + self.comp_name + ';' + self.type + ';' + self.diff + '\n'


class CrossDuplication:
    def __init__(self, pn, comp, cnt):
        self.pn = pn
        self.comp = comp
        self.cnt = cnt

    def __str__(self):
        return f'{self.pn};{self.comp};{self.cnt}\n'

    def __repr__(self):
        return str(self)

    def __hash__(self):
        return hash(('pn', self.pn,
                 'competitor', self.comp))

    def __eq__(self, other):
        return self.pn == other.pn and self.comp == other.comp 


# FUNCTIONS
def get_formated_time(mili):
    sec = mili / 1000.0
    return str(datetime.timedelta(seconds = sec)) 

def get_green(text):    # return red text
    return(TextFormat.GREEN + str(text) + TextFormat.END)


def get_red(text):      # return red text
    return(TextFormat.RED + str(text) + TextFormat.END)


def get_yellow(text):   # return yellow text
    return(TextFormat.YELLOW + str(text) + TextFormat.END)


def get_blue(text):     # return blue text
    return(TextFormat.BLUE + str(text) + TextFormat.END)


def get_bold(text):     # return bold text format
    return(TextFormat.BOLD + str(text) + TextFormat.END)


def print_info(text):   # print info text format
    print("=== " + str(text) + " ===")


# ### LOADER ### Load Cross Reference file
def CSVCrossLoader(file_url, type):
    try:
        print(get_yellow("============ LOAD CROSS CSV DATA ==========="))

        print_info(get_green(f"Try to load data from {file_url}"))
        destination = []
        with open(file_url, encoding="utf-8-sig") as csv_file:
            csv_reader = csv.reader(csv_file, delimiter=';')
            line_count = 0
            for row in csv_reader:
                if row[0].startswith('*'):
                    continue
                if Type[row[3]] is not type:
                    continue
                cr = CrossReference(row[0], row[1], row[2], row[3], row[4])
                destination.append(cr)
                line_count += 1
            filename = file_url.rsplit('\\', 1)
            print(
                f'Processed {get_red(line_count)} lines for {get_red(type.name)} from {filename[1]}')
            print_info(get_green(f"Data was loaded successfully"))
            return destination
    except Exception as e:
        print(e)
        print_info(get_red(f"File {file_url} could not be loaded"))
        print_info(get_red("Program End"))
        exit(0)


# ### LOADER ### Load Catalog with PN details (load only first row)
def CSVCatalogLoader(file_url):
    try:
        print(get_yellow("=========== LOAD CATALOG CSV DATA =========="))
        print_info(get_green(f"Try to load data from {file_url}"))
        destination = []
        with open(file_url, encoding="utf-8-sig") as csv_file:
            csv_reader = csv.reader(csv_file, delimiter=';')
            line_count = 0
            for row in csv_reader:
                if row[0].startswith('*'):
                    continue
                destination.append(row[0])
                line_count += 1
            filename = file_url.rsplit('\\', 1)
            print(f'Processed {get_red(line_count)} lines from {filename[1]}')
            print_info(get_green(f"Data was loaded successfully"))
            return destination
    except:
        print_info(get_red(f"File {file_url} could not be loaded"))
        print_info(get_red("Program End"))
        exit(0)



def FindDuplications(tasks):
    dlist, start, count = tasks

    duplicates = []
    for r in tqdm(dlist[start:start + count]):
        matches = [x for x in dlist if r.pn == x.pn and r.comp == x.comp]
        duplicates.append(CrossDuplication(r.pn, r.comp, len(matches)))

    return {d for d in duplicates if d.cnt > 1}


def CheckDuplications(cross_list):
    threads = cpu_count()
    tasks_per_thread = ceil(len(cross_list) / threads)

    tasks = [(cross_list, tasks_per_thread * i, tasks_per_thread) for i in range(threads)]

    p = Pool(threads)
    duplicates = p.map(FindDuplications, tasks)
    p.close()
    p.join() 

    duplicates = {item for sublist in duplicates for item in sublist}
    return duplicates   




def main():

    # Main Title of app
    print_info(get_yellow("Run app"))


    # VARIABLES
    catalog_list = []
    cross_list = []


    # Start calculate program running time
    start_time = int(round(time.time() * 1000))


    # load URL param from program input arguments
    validation_type = Type[sys.argv[1]]
    cross_ref_url = sys.argv[2]
    catalog_url = sys.argv[3]


    # Get info abou tested type
    print_info(get_blue(f"|||   Validate data for {validation_type.name}   |||"))
    print("Number of processors: ", cpu_count())
    print()


    # load data
    cross_list = CSVCrossLoader(cross_ref_url, validation_type)
    catalog_list = CSVCatalogLoader(catalog_url)

    # Chech data in Cross Reference for Duplications [ MULTITHREAD ]
    duplicates = CheckDuplications(cross_list)

    # Print duration of execution script
    mili = int(int(round(time.time() * 1000)) - start_time)
    print(f'Script duration - {mili} ms | {get_formated_time(mili)}')


    # End of program
    print_info(get_yellow(""))
    print()

запуск. json - файл конфигурации кода VS

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "First",
            "type": "python",
            "request": "launch",
            "program": "${file}",
            "console": "integratedTerminal",
            "args": [
                "TT",
                "..\\url\\ref.csv",
                "..\\url\\catalog.csv"
            ]
        }
    ]
}

ФАЙЛ ДАННЫХ - ref.csv (пример)

xxx;123;
ccc;dgd;
xxx;323;
xxx;dgd;
xxx;123;
...etc:.

ФАЙЛ ДАННЫХ - catalog.csv (пример )

xxx;
ccc;
vvv;
fff;
xyx;
xxx;
cff;
ccc;
www;
...etc:.

Приложение загружает 2 CSV-файла и находит дубликаты строк в ref.csv, в этом файле более 100k + строк и сравнивает первый и второй столбцы каждой строки с одинаковыми данными в foreach l oop

Для L oop для списка объектов с использованием многопоточности в Python - Мой предыдущий вопрос, как это сделать многопоточностью


РЕДАКТИРОВАТЬ - 10/03/2020 - Третий компьютер

Сегодня я пробую его на своем ноутбуке (Lenovo T480s) с Intel Core i7-8550U с 4c / 8t

I запустить его с threads = cpu_count(), эта функция retu 8 ядер / потоков и все работает нормально, с той же конфигурацией, что и на 2 предыдущих компьютерах, но только на Intel Core i9-9900. Код ошибки:

Кроме того, я попытался установить i9-9900:

threads = 8   # OK
threads = 12  # OK
threads = 14  # ERROR
threads = 16  # ERROR

================================================ Выполнить native в CMD или Powershell отлично работает с 16 потоками - OK

C:\Users\test\AppData\Local\Programs\Python\Python38\python.exe 'c:\Users\test\Documents\Work\Sources\APP\src\APP\cross-validator.py' 'TT' 'c:\Users\test\Documents\Work\Sources\APP\src\APP\APP\Definitions\ref.csv' 'c:\Users\test\Documents\Work\Sources\APP\src\APP\APP\Definitions\Tan\catalog.csv'

Запуск через отладку кода VS добавляет еще один параметр со ссылкой на ms- python - ERROR

 ${env:PTVSD_LAUNCHER_PORT}='49376'; & 'C:\Users\test\AppData\Local\Programs\Python\Python38\python.exe' 'c:\Users\test\.vscode\extensions\ms-python.python-2020.2.64397\pythonFiles\lib\python\new_ptvsd\no_wheels\ptvsd\launcher' 'c:\Users\test\Documents\Work\Sources\APP\src\APP\cross-validator.py' 'TAN' 'c:\Users\test\Documents\Work\Sources\APP\src\APP\APP\Definitions\ref.csv' 'c:\Users\test\Documents\Work\Sources\APP\src\APP\APP\Definitions\Tan\catalog.csv'

Спасибо за помощь

1 Ответ

0 голосов
/ 27 февраля 2020

Проверьте настройки localhost. Или ваш порт 63323 занят другой программой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...