0

I keep running into this error that I never had before every time I try running python run_p2pool.py, I even tried doing -n and typing in the argument and that doesn't fix it (as the internet suggested). I also have the configurations already there and even tried reinstalling python twisted with no avail. There is no error in the code I am trying to run and I am yet to figure out how to get this fixed.

# Twisted doesn't have abortConnection! Upgrade to a newer version of Twisted to avoid memory leaks!
> Pausing for 3 seconds...
> 2017-11-02 01:07:47.958817 > Traceback (most recent call last):
> 2017-11-02 01:07:47.958986 >   File "run_p2pool.py", line 5, in <module>
> 2017-11-02 01:07:47.959116 >     main.run()
> 2017-11-02 01:07:47.959191 >   File "/var/www/html/DashPool/DPI-MASTER/Dash-Pool-Integration/p2pool/main.py", line 687, in run
> 2017-11-02 01:07:47.959422 >     deferral.RobustLoopingCall(logfile.reopen).start(5)
> 2017-11-02 01:07:47.959490 >   File "/var/www/html/DashPool/DPI-MASTER/Dash-Pool-Integration/p2pool/util/deferral.py", line 277, in start
> 2017-11-02 01:07:47.959605 >     self._df = self._worker(period).addErrback(lambda fail: fail.trap(defer.CancelledError))
> 2017-11-02 01:07:47.959686 >   File "/var/www/html/DashPool/DPI-MASTER/Dash-Pool-Integration/p2pool/util/deferral.py", line 225, in _
> 2017-11-02 01:07:47.960104 >     df = defer.Deferred(cancelled)
> 2017-11-02 01:07:47.960195 > TypeError: __init__() takes exactly 1 argument (2 given)

I never had this problem before and was able to run the same program before, but just encase, here is the defferal.py file

from __future__ import division



import itertools

import random

import sys



from twisted.internet import defer, reactor

from twisted.python import failure, log



def sleep(t):

d = defer.Deferred(canceller=lambda d_: dc.cancel())

dc = reactor.callLater(t, d.callback, None)

return d



def run_repeatedly(f, *args, **kwargs):

current_dc = [None]

def step():

    delay = f(*args, **kwargs)

    current_dc[0] = reactor.callLater(delay, step)

step()

def stop():

    current_dc[0].cancel()

return stop



class RetrySilentlyException(Exception):

pass



def retry(message='Error:', delay=3, max_retries=None, traceback=True):

'''

@retry('Error getting block:', 1)

@defer.inlineCallbacks

def get_block(hash):

    ...

'''



def retry2(func):

    @defer.inlineCallbacks

    def f(*args, **kwargs):

        for i in itertools.count():

            try:

                result = yield func(*args, **kwargs)

            except Exception as e:

                if i == max_retries:

                    raise

                if not isinstance(e, RetrySilentlyException):

                    if traceback:

                        log.err(None, message)

                    else:

                        print >>sys.stderr, message, e

                yield sleep(delay)

            else:

                defer.returnValue(result)

    return f

return retry2



class ReplyMatcher(object):

'''

Converts request/got response interface to deferred interface

'''



def __init__(self, func, timeout=5):

    self.func = func

    self.timeout = timeout

    self.map = {}



def __call__(self, id):

    if id not in self.map:

        self.func(id)

    df = defer.Deferred()

    def timeout():

        self.map[id].remove((df, timer))

        if not self.map[id]:

            del self.map[id]

        df.errback(failure.Failure(defer.TimeoutError('in ReplyMatcher')))

    timer = reactor.callLater(self.timeout, timeout)

    self.map.setdefault(id, set()).add((df, timer))

    return df



def got_response(self, id, resp):

    if id not in self.map:

        return

    for df, timer in self.map.pop(id):

        df.callback(resp)

        timer.cancel()



class GenericDeferrer(object):

'''

Converts query with identifier/got response interface to deferred interface

'''



def __init__(self, max_id, func, timeout=5, on_timeout=lambda: None):

    self.max_id = max_id

    self.func = func

    self.timeout = timeout

    self.on_timeout = on_timeout

    self.map = {}



def __call__(self, *args, **kwargs):

    while True:

        id = random.randrange(self.max_id)

        if id not in self.map:

            break

    def cancel(df):

        df, timer = self.map.pop(id)

        timer.cancel()

    try:

        df = defer.Deferred(cancel)

    except TypeError:

        df = defer.Deferred() # handle older versions of Twisted

    def timeout():

        self.map.pop(id)

        df.errback(failure.Failure(defer.TimeoutError('in GenericDeferrer')))

        self.on_timeout()

    timer = reactor.callLater(self.timeout, timeout)

    self.map[id] = df, timer

    self.func(id, *args, **kwargs)

    return df



def got_response(self, id, resp):

    if id not in self.map:

        return

    df, timer = self.map.pop(id)

    timer.cancel()

    df.callback(resp)



def respond_all(self, resp):

    while self.map:

        id, (df, timer) = self.map.popitem()

        timer.cancel()

        df.errback(resp)



class NotNowError(Exception):

pass



class DeferredCacher(object):

'''

like memoize, but for functions that return Deferreds



@DeferredCacher

def f(x):

    ...

    return df



@DeferredCacher.with_backing(bsddb.hashopen(...))

def f(x):

    ...

    return df

'''



@classmethod

def with_backing(cls, backing):

    return lambda func: cls(func, backing)



def __init__(self, func, backing=None):

    if backing is None:

        backing = {}



    self.func = func

    self.backing = backing

    self.waiting = {}



@defer.inlineCallbacks

def __call__(self, key):

    if key in self.waiting:

        yield self.waiting[key]



    if key in self.backing:

        defer.returnValue(self.backing[key])

    else:

        self.waiting[key] = defer.Deferred()

        try:

            value = yield self.func(key)

        finally:

            self.waiting.pop(key).callback(None)



    self.backing[key] = value

    defer.returnValue(value)



_nothing = object()

def call_now(self, key, default=_nothing):

    if key in self.backing:

        return self.backing[key]

    if key not in self.waiting:

        self.waiting[key] = defer.Deferred()

        def cb(value):

            self.backing[key] = value

            self.waiting.pop(key).callback(None)

        def eb(fail):

            self.waiting.pop(key).callback(None)

            if fail.check(RetrySilentlyException):

                return

            print

            print 'Error when requesting noncached value:'

            fail.printTraceback()

            print

        self.func(key).addCallback(cb).addErrback(eb)

    if default is not self._nothing:

        return default

    raise NotNowError(key)



def deferred_has_been_called(df):

still_running = True

res2 = []

def cb(res):

    if still_running:

        res2[:] = [res]

    else:

        return res

df.addBoth(cb)

still_running = False

if res2:

    return True, res2[0]

return False, None

def inlineCallbacks(f):

from functools import wraps

@wraps(f)

def _(*args, **kwargs):

    gen = f(*args, **kwargs)

    stop_running = [False]

    def cancelled(df_):

        assert df_ is df

        stop_running[0] = True

        if currently_waiting_on:

            currently_waiting_on[0].cancel()

    df = defer.Deferred(cancelled)

    currently_waiting_on = []

    def it(cur):

        while True:

            try:

                if isinstance(cur, failure.Failure):

                    res = cur.throwExceptionIntoGenerator(gen) # external code is run here

                else:

                    res = gen.send(cur) # external code is run here

                if stop_running[0]:

                    return

            except StopIteration:

                df.callback(None)

            except defer._DefGen_Return as e:

                # XXX should make sure direct child threw

                df.callback(e.value)

            except:

                df.errback()

            else:

                if isinstance(res, defer.Deferred):

                    called, res2 = deferred_has_been_called(res)

                    if called:

                        cur = res2

                        continue

                    else:

                        currently_waiting_on[:] = [res]

                        def gotResult(res2):

                            assert currently_waiting_on[0] is res

                            currently_waiting_on[:] = []

                            if stop_running[0]:

                                return

                            it(res2)

                        res.addBoth(gotResult) # external code is run between this and gotResult

                else:

                    cur = res

                    continue

            break

    it(None)

    return df

return _







class RobustLoopingCall(object):

def __init__(self, func, *args, **kwargs):

    self.func, self.args, self.kwargs = func, args, kwargs



    self.running = False



def start(self, period):

    assert not self.running

    self.running = True

    self._df = self._worker(period).addErrback(lambda fail: fail.trap(defer.CancelledError))



@inlineCallbacks

def _worker(self, period):

    assert self.running

    while self.running:

        try:

            self.func(*self.args, **self.kwargs)

        except:

            log.err()

        yield sleep(period)



def stop(self):

    assert self.running

    self.running = False

    self._df.cancel()

    return self._df
ConfusedDev
  • 31
  • 2
  • 7
  • actually im not sure as the source code shows the following for the constructor of `Deferred` classes `def __init__(self, canceller=None):`... what does `cancelled` reference in your code?? – 0TTT0 Nov 01 '17 at 22:46
  • if currently_waiting_on: currently_waiting_on[0].cancel() df = defer.Deferred(cancelled) currently_waiting_on = [] def it(cur): – ConfusedDev Nov 01 '17 at 22:52
  • please post your code as an edit to your question – 0TTT0 Nov 01 '17 at 22:54
  • Done, posted my code as an edit, know a fix? – ConfusedDev Nov 01 '17 at 23:07
  • do you need to pass something into `cancelled`? in your definition it says it takes in `_df`.. – 0TTT0 Nov 01 '17 at 23:10
  • No, it ran before as now I am trying to figure out what the connection error is, it is for the p2pool python library. I don't know how to solve this error and am wondering if it is something with the settings going on or something – ConfusedDev Nov 02 '17 at 18:29
  • Believe it or not, this error still exists for P2Pool. Even when running Python 2.7 commands it still happens. Looked at its protocol and tried even asking some of the devs and top community members. Nothing. – ConfusedDev Feb 27 '18 at 20:49

0 Answers0