Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
 
tseriess
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 92
#1

Автозакрытие Thread после выполнения - Python

22.06.2017, 20:20. Просмотров 676. Ответов 28
Метки нет (Все метки)

Суть в чем имею такой скрипт

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import urllib2
import time
import json
import threading
 
 
BBBBB = open("ddddd.txt", "a")
def scan(aaaaa):
    urlRequest = urllib2.Request("https://xxx=" + aaaaa)
    data = urllib2.urlopen(urlRequest).read()
    json_data = json.loads(data)
    if json_data["result"]>"0":
            BBBBB.write("BBBBB of " + aaaaa + " is " + str(json_data["result"]) + "\n") 
    print ("BBBBB of " + aaaaa + " is " + str(json_data["result"]) + "\n")
 
def main():
    f = open("rass1.txt", "r")
    for line in f:
        t = threading.Thread(target=scan, args=(line,))
        t.daemon = True
        time.sleep(0)
        t.start()
 
if __name__ == '__main__':
    main()
Проблема в том что со временем я получаю
Python
1
2
3
  File "G:\python\lib\threading.py", line 736, in start
    _start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread
Пробовал писать exit() конце функции scan, все равно ловлю thread.error , также пробовал писать BBBBB.close() в конце функция скана и нитей. Тогда периодами ловлю I/O error иза частоты закрытий файла. Нити почему то просто не закрываются , подскажите решение.

Добавлено через 18 минут
с t.join() не получается тогда все ставится одно поточным, если использовать t1 t2 t3 тогда все просто дублируется. Не пойму как сделать

Добавлено через 5 часов 7 минут
Некто не делал многопоточность в питоне и не сталкивался с этим бредом ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2017, 20:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Автозакрытие Thread после выполнения (Python):

Задержка окна консоли после выполнения кода
Есть код, который использует модули os, subprocess, вызывает cmd и пытается...

Продолжение выполнения цикла после нажатия клавиши
Имеется двумерный list, пример: , , ], в котором заключены введёные...

Как сделать задержку экрана после выполнения кода?
Как сделать задержку экрана после выполнения кода? В обычной idle с помощью...

Какое значение будет иметь переменная z при x=1, y=1 после выполнения операторов?
Какое значение будет иметь переменная z при x=1, y=1 после выполнения...

Thread после выполнения закрывается?
Добрый день!) подскажите такую штуку. есть поток Thread ProcessThread = new...

Автозакрытие приложения после 30 минут бездействия
Здравствуйте. Подскажите пожалуйста как сделать так чтобы программа...

28
tseriess
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 92
24.06.2017, 14:12  [ТС] #21
Что касательно I/O у питона искусственное ограничение на возможность писать в файл ?
По другому не представляю как объяснить эту упоротость причем что сам питон что скрипт что файл который читает и пишется на рам диске.

Добавлено через 4 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Вероятно вам никто не поможет, ибо думать вы не хотите.
Нет просто вы невнимательно прочитали вопрос и даете абсолютно не применимое решение.
Каким образом ваш костил аля индус код чем больше строк - тем лучше решит проблему с тем что скрипт то пишет все данные файл то почему то только часть?

Добавлено через 46 секунд
Зачем там ваще рандом ? абы был ?
0
Avazart
Эксперт С++
7676 / 5585 / 542
Регистрация: 10.12.2010
Сообщений: 25,060
Записей в блоге: 17
24.06.2017, 14:13 #22
Цитата Сообщение от tseriess Посмотреть сообщение
Что касательно I/O у питона искусственное ограничение на возможность писать в файл ?
Один файл - один поток.
Открывать один файл для записи с нескольких потоков не выйдет.
del
0
tseriess
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 92
24.06.2017, 14:39  [ТС] #23
Цитата Сообщение от Avazart Посмотреть сообщение
Один файл - один поток.
Открывать один файл для записи с нескольких потоков не выйдет.
Но почему тогда пару запусков корректно записывают а потом начинают непонятки ?
Кто муже там чтение в много потоков ити должно. Почему такой бред творится которого быть не должно
Зачем мне 100500 проверок потоков, это должно решатся парой строчек кода. Это не си где надо городить километры кода для простого действия.

Решение с потоками мне уже подсказали, и оно работает и там всего 2 строчки кода . Но проблема в том что творится какая-то мистическая хрень с записью в файл.

Добавлено через 9 минут
вот к примеру исправленный код с мистическими проблемами с записью в файл

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import urllib2
import time
import json
import threading
threadArray =[]
 
balances = open("ddddd.txt", "a")
def scan(address):
    urlRequest = urllib2.Request("https://api.etherscan.io/api?module=account&action=balance&address=" + address)
    data = urllib2.urlopen(urlRequest).read()
    json_data = json.loads(data)
    if json_data["result"]>"0":
            balances.write("Balance of " + address + " is " + str(json_data["result"]) + "\n")
    print ("Balance of " + address + " is " + str(json_data["result"]) + "\n")
 
def main():
    f = open("rass1.txt", "r")
    for line in f:
        threadArray.append(threading.Thread(target=scan, args=(line,)))
        threadArray[-1].start()
        time.sleep(0.01)
    
if __name__ == '__main__':
    main()

То все как надо пишет, то его кондратий берет все проверит но в файл половину записей не запишет


вот данные на вход подаваемые

Код
0xEfC1b869c7E2daf9095A1AD2Bc332F9aAb6660aF
0xEfC1b869c7E2daf9095A1AD2Bc332F9aAb6660aF
0xEfC1b869c7E2daf9095A1AD2Bc332F9aAb6660aF
в моем варианте продублированные 8000 раз для проверки корректности. На выходе должно получается 16 тысяч строк в файле. Пару раз он сработал коректно, последующие запуски не дают более той коректности записи, а часть данных пишут, часть куда-то местническим образом уходит. Хотя приведущий запуск все верно сделал.

слип поставил так как была мысль что в этом проблема, но нет хоть 0.1 задержку ставить все равно начинает "тупить" И потоков вроде открыто приемлемо.

Добавлено через 12 минут
Я извиняюсь за свою неадекватность, уже сутки с этим пытаюсь что то сделать. И как удается одну проблему решить вылазит другая.

И также я прямо пишу что не понимаю как применить показанный пример к моему коду.
0
Avazart
Эксперт С++
7676 / 5585 / 542
Регистрация: 10.12.2010
Сообщений: 25,060
Записей в блоге: 17
24.06.2017, 15:05 #24
Цитата Сообщение от tseriess Посмотреть сообщение
Вот вам ссылка на документацию питона и не задавайте глупых вопросов, я все знаю и мне норм"
Кстати пример на основе кода из книги Самерфилда "Программирование на Python3" страница 477
0
magirus
24.06.2017, 15:07
  #25
 Комментарий модератора 
настоятельно прошу воздержаться от переходов на личности
0
tseriess
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 92
24.06.2017, 15:40  [ТС] #26
Цитата Сообщение от Avazart Посмотреть сообщение
Кстати пример на основе кода из книги Самерфилда "Программирование на Python3" страница 477
У писал что питон 2.7.13, с большой вероятностью это не годится. Если уж приводили пример то привели бы уже с чтением строк из файла пример.
Так как там поточность то в основном для чтения из файла и используется.

Добавлено через 18 минут
Как я сюда
Python
1
2
3
def main():
    f = open("rass1.txt", "r")
    for line in f:
применю

Python
1
for t in range(thread_count):
0
Avazart
Эксперт С++
7676 / 5585 / 542
Регистрация: 10.12.2010
Сообщений: 25,060
Записей в блоге: 17
24.06.2017, 15:45 #27
Что стоит заменить

Python
1
2
3
4
    task_count = 100
    tasks = range(task_count)
    for task in tasks:
        work_queue.put(task)
На
Python
1
2
3
    f = open("rass1.txt", "r")
    for line in f:
       work_queue.put(line)
А time.sleep() ваш код работы с сетью и записью в файл.
И как я сказал файл у каждого потока должен быть разный.
0
tseriess
0 / 0 / 0
Регистрация: 30.08.2015
Сообщений: 92
24.06.2017, 20:28  [ТС] #28
Цитата Сообщение от Avazart Посмотреть сообщение
И как я сказал файл у каждого потока должен быть разный.
вот тут не понял, как это файл у каждого потока должен быть разным ? Ведь задача читать с одного файла данные и писать в 1 файла, и лишь парсить в многопоточном режиме. По моему это бред какой-то выходит, если каждому потококу надо отдельно файл создавать.

Какой смысл в многопоточности тогда если надо для каждого потока по файлу создавать? ) если легче уже запустить несколько копий программы с разными файлами.

Ведь в стандартной ( кривой реализации ) он же читает потоками строчки отлично, только как вы писали gc потоки прибивает до их выполнения и прибиваются судя по всему те что на запись в файл)

Добавлено через 14 минут
Python
1
2
    import queue
ImportError: No module named queue
Он не ставится на питоне 2.7.13

Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
g:\>easy_install-2.7 queue
Searching for queue
Reading [url]https://pypi.python.org/simple/queue/[/url]
No local packages or working download links found for queue
error: Could not find suitable distribution for Requirement.parse('queue')
 
g:\>pip2.7 install queue
Collecting queue
  Could not find a version that satisfies the requirement queue (from versions:
)
No matching distribution found for queue
Добавлено через 5 минут
В питоне 2 оказывается import Queue , в любом случае как это исправить удалось посыпались другие ошибки. Код для 3 питона и для 2 не годится (

Добавлено через 4 часа 7 минут
Уже головой об стену готов биться, не уж то для питона 2.7 не существует решения ? Или до меня настолько не доходит :/
0
alex925
2660 / 2272 / 625
Регистрация: 19.03.2012
Сообщений: 8,821
25.06.2017, 17:37 #29
Цитата Сообщение от tseriess Посмотреть сообщение
Уже головой об стену готов биться, не уж то для питона 2.7 не существует решения ?
Существуют и тебе о них сказали уже.
Цитата Сообщение от tseriess Посмотреть сообщение
Он не ставится на питоне 2.7.13
queue это модуль стандартной библиотеки, его не надо ставить отдельно ни на какой версии python.

Не по теме:


Цитата Сообщение от tseriess Посмотреть сообщение
для питона 2.7
Это древнеисторическая версия, ей не пользуются сейчас.

0
25.06.2017, 17:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2017, 17:37
Привет! Вот еще темы с решениями:

Ожидание выполнения Thread 64+
Код рабочий, все ок. Но больше 64 потока WaitHandle не поддерживает, как...

Изменить горизонтальное меню - сделать автозакрытие выпадающего меню после отвода курсора
Вообщем что имеем: http://test.aowserv.ru имеется горизонтальное меню, при...

Дождаться выполнения Task без Thread.Sleep?
using System; public class Test { public static void Main() {...

Как использовать Thread.Sleep() для нескольких задержек выполнения кода в WPF приложении?
Как использовать Thread.Sleep() для организации нескольких задержек выполнения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru