Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки. Питон. 
:(
    Опции темы
Гость_nerezus
  Дата 1.12.2005, 17:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Куча ошибок вида:
Код

Exception in thread Thread-9:
Traceback (most recent call last):
  File "C:\Devel\Python24\lib\threading.py", line 442, in __bootstrap
    self.run()
  File "C:\!python\threeds.py", line 22, in run
    value = Counter.inc(1)
TypeError: unbound method inc() must be called with Counter instance as first argument (got int inst
ance instead)


Код:
Код

import threading
import time
import random

class Counter:
    def __init__(self):
        self.lock = threading.Lock()
        self.value = 0
        
    def inc(self, val):
        self.lock.acquire()
        self.value+=val
        self.lock.release()
        return value
        

counter = Counter()

class Worker(threading.Thread):
    def run(self):
        for i in range(10):
            value = Counter.inc(1)
            time.sleep(random.randint(10, 100) / 1000.0)
            print self.getName(), "--task", i, "finished", value

for i in range(10):
    Worker().start()
    


Как пофиксить? smile:
  Вверх
Void
Дата 1.12.2005, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 10
Всего: 173



Код
import threading
import time
import random

class Counter:
    def __init__(self):
        self.lock = threading.Lock()
        self.value = 0
        
    def inc(self, val):
        self.lock.acquire()
        self.value+=val
        self.lock.release()
        return self.value # было return value
        

counter = Counter()

class Worker(threading.Thread):
    def run(self):
        for i in range(10):
            value = counter.inc(1) # было value = Counter.inc(1)
            time.sleep(random.randint(10, 100) / 1000.0)
            print self.getName(), "--task", i, "finished", value

for i in range(10):
    Worker().start()



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Guest
Дата 1.12.2005, 17:40 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











видимо дело в том, что если есть объявление
Код
class A:
    def f(self, x):
        return -x

a = A()
то метод f() нужно вызывать либо так
Код
>>> a.f(3)
-3
либо так
Код
>>> A.f(a, 3)
-3
возможно ты просто опечатался в строке #22.
  Вверх
Гость_nerezus
Дата 1.12.2005, 18:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











спасибо, заработало smile

(пример из статьи, неправильно набрал ) smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.