Таким образом, я рассмотрел код питона и заметил, что poclbm пытается получить новую работу только один раз, а затем отображается сообщение об ошибке, в результате чего функции и повторные попытки получить работу позже.
Это не проблема, но если решаемая блок передается функции, он ведет себя точно так же. Это означает, что вы работали много дней, чтобы решить блок, а затем одна ошибка сети достаточно, чтобы переместить 50 BTC издалека ?! Таким образом, я изменил это, чтобы повторить попытку установления соединения устанавливаемого числа раз.
Кроме того, я изменил предвыборки магию работы, чтобы избежать простоев на медленных и / или высокой латентности интернет-линии, потому что для меня poclbm работает 30 секунд, на холостом ходу 10-20 секунд, работает 30 секунд ...
Если вы хотите попробовать это вы можете найти переработанный вариант здесь: http://pastebin.com/dNHuEFma
Может быть, вы можете оставить некоторые вопросы, если таковые имеются, или просто сообщают об успехах.
Я еще новичок, так что я отправляю здесь. Если вы можете, пожалуйста, переместить мой пост, если он не принадлежит к этому разделу.
Это патч я сделал для BitcoinMiner.py:
Код:
--- BitcoinMiner.py 2011-06-24 12: 54: +19,000000000 +0200
+++ BitcoinMinerDJ.py 2011-06-29 09: 55: +54,000000000 +0200
@@ -26,13 +26,15 @@
socket.socket = socketwrap
-VERSION = '2011.beta4'
+VERSION = '2011.beta4.derjanb.v1'
USER_AGENT = 'poclbm /' + версия
TIME_FORMAT = '% d /% м /% Y% H:% M:% S'
-АУТ = 5
+АУТ = 10
+
+RETRIES = 3
LONG_POLL_TIMEOUT = 3600
@@ -122,6 +124,7 @@
self.failback_getwork_count = 0
self.failback_attempt_count = 0
не self.pool = None
+ self.currentrate = 0
Host = '% S:% s' % (host.replace ( 'HTTP: //', ''), порт)
self.primary = (пользователь, пароль, хост)
@@ -140,6 +143,7 @@
кроме ValueError:
self.sayLine ( 'Игнорируется недопустимый резервный пул:% S', бассейн)
Продолжать
+ self.sayLine (»работает% s', USER_AGENT)
Защита сказать (самостоятельно, формат, арг = ()):
с self.outputLock:
@@ -160,6 +164,7 @@
self.stop = True
Защиту hashrate (самость, скорость):
+ self.currentrate = (self.currentrate + ставка) / 2
self.say ( '% S хаш / с', скорость)
отказ четкости (я, сообщение):
@@ -224,49 +229,70 @@
если принято = None:
self.blockFound (упаковка ( 'I', длинный (ч [6])). закодировать ( 'шестигранной'), принято)
+ Защиту getAscii (я, п):
+ CNT = N% 4
+ если CNT == 0:
+ вернуться «|»
+ если CNT == 1:
+ вернуть '/'
+ если CNT == 2:
+ вернуть '-'
+ если CNT == 3:
+ вернуть '\\'
+ вернуть ' '
+
Защиту getwork (само данные = нет):
- не save_pool = None
- пытаться:
- если self.pool! = self.primary и self.failback > 0:
- если self.failback_getwork_count >= Self.failback:
- save_pool = self.pool
- self.setpool (self.primary)
- не self.connection = None
- self.sayLine ("Попытка не в состоянии вернуться к первичному бассейну")
- self.failback_getwork_count + 1 =
- если не self.connection:
- self.connection = httplib.HTTPConnection (self.host, строги = True, тайм-аут = TIMEOUT)
- self.postdata [ 'PARAMS'] = if_else (данные, [данных], [])
- (Self.connection, результат) = self.request (self.connection, '/', self.headers, отвалов (self.postdata))
- self.errors = 0
- если self.pool == self.primary:
- self.backup_pool_index = 0
- self.failback_getwork_count = 0
- self.failback_attempt_count = 0
- возвращаемый результат [ «результат»]
- кроме NotAuthorized:
- self.failure ( «Неправильное имя пользователя или пароль»)
- кроме RPCError как е:
- self.say ( '% s', е)
- за исключением (IOError, httplib.HTTPException, ValueError):
- если save_pool:
- self.failback_attempt_count + 1 =
- self.setpool (save_pool)
- self.sayLine ( «Тем не менее не удалось подключиться к основному бассейну (попытка% с), в противном случае над», self.failback_attempt_count)
- self.failback_getwork_count = 0
- вернуть
- self.say ( 'Проблемы сообщающиеся с Bitcoin RPC% s% s', (self.errors, self.tolerance))
- self.errors + 1 =
- если self.errors > self.tolerance + 1:
+ макс = if_else (данные, 2 * RETRIES, RETRIES)
+ для п в диапазоне (1, макс):
+ не save_pool = None
+ пытаться:
+ если self.pool! = self.primary и self.failback > 0:
+ если self.failback_getwork_count >= Self.failback:
+ save_pool = self.pool
+ self.setpool (self.primary)
+ не self.connection = None
+ self.sayLine ("Попытка не в состоянии вернуться к первичному бассейну")
+ self.failback_getwork_count + 1 =
+ если не self.connection:
+ self.connection = httplib.HTTPConnection (self.host, строги = True, тайм-аут = TIMEOUT)
+ self.postdata [ 'PARAMS'] = if_else (данные, [данных], [])
+ (Self.connection, результат) = self.request (self.connection, '/', self.headers, отвалов (self.postdata))
self.errors = 0
- если self.backup_pool_index >= Len (self.backup):
- self.sayLine ("Нет больше резервные бассейны остались. Использование первичных и начать сначала.")
- бассейн = self.primary
+ если self.pool == self.primary:
self.backup_pool_index = 0
- еще:
- Бассейн = self.backup [self.backup_pool_index]
- self.backup_pool_index + 1 =
- self.setpool (бассейн)
+ self.failback_getwork_count = 0
+ self.failback_attempt_count = 0
+ возвращаемый результат [ «результат»]
+ кроме NotAuthorized:
+ self.failure ( «Неправильное имя пользователя или пароль»)
+ вернуть
+ кроме RPCError как е:
+ self.say ( '% s', е)
+ за исключением (IOError, httplib.HTTPException, ValueError):
+ если save_pool:
+ self.failback_attempt_count + 1 =
+ self.setpool (save_pool)
+ self.sayLine ( «Тем не менее не удалось подключиться к основному бассейну (попытка% с), в противном случае над», self.failback_attempt_count)
+ self.failback_getwork_count = 0
+ вернуть
+ если п == макс:
+ self.say ( 'Проблемы сообщающиеся с Bitcoin RPC% s% s', (self.errors, self.tolerance))
+ self.errors + 1 =
+ если self.errors > self.tolerance + 1:
+ self.errors = 0
+ если self.backup_pool_index >= Len (self.backup):
+ self.sayLine ("Нет больше резервные бассейны остались. Использование первичных и начать сначала.")
+ бассейн = self.primary
+ self.backup_pool_index = 0
+ еще:
+ Бассейн = self.backup [self.backup_pool_index]
+ self.backup_pool_index + 1 =
+ self.setpool (бассейн)
+ если (self.connection):
+ self.connection.close ()
+ не self.connection = None
+ self.say ( 'Пожалуйста, подождите:% s', self.getAscii (п))
+ сон (0,50)
Защита setpool (я, бассейн):
self.pool = бассейн
@@ -408,7 +434,7 @@
cl.enqueue_write_buffer (очередь, output_buf, выход)
если self.updateTime == '':
- если noncesLeft < (ТАЙМАУТ + 1) * * globalThreads self.frames:
+ если noncesLeft < (АУТ + 1) * self.currentrate * 1000:
self.update = True
noncesLeft + = 0xFFFFFFFFFFFF
Элиф 0xFFFFFFFFFFF < noncesLeft < 0xFFFFFFFFFFFF:
+++ BitcoinMinerDJ.py 2011-06-29 09: 55: +54,000000000 +0200
@@ -26,13 +26,15 @@
socket.socket = socketwrap
-VERSION = '2011.beta4'
+VERSION = '2011.beta4.derjanb.v1'
USER_AGENT = 'poclbm /' + версия
TIME_FORMAT = '% d /% м /% Y% H:% M:% S'
-АУТ = 5
+АУТ = 10
+
+RETRIES = 3
LONG_POLL_TIMEOUT = 3600
@@ -122,6 +124,7 @@
self.failback_getwork_count = 0
self.failback_attempt_count = 0
не self.pool = None
+ self.currentrate = 0
Host = '% S:% s' % (host.replace ( 'HTTP: //', ''), порт)
self.primary = (пользователь, пароль, хост)
@@ -140,6 +143,7 @@
кроме ValueError:
self.sayLine ( 'Игнорируется недопустимый резервный пул:% S', бассейн)
Продолжать
+ self.sayLine (»работает% s', USER_AGENT)
Защита сказать (самостоятельно, формат, арг = ()):
с self.outputLock:
@@ -160,6 +164,7 @@
self.stop = True
Защиту hashrate (самость, скорость):
+ self.currentrate = (self.currentrate + ставка) / 2
self.say ( '% S хаш / с', скорость)
отказ четкости (я, сообщение):
@@ -224,49 +229,70 @@
если принято = None:
self.blockFound (упаковка ( 'I', длинный (ч [6])). закодировать ( 'шестигранной'), принято)
+ Защиту getAscii (я, п):
+ CNT = N% 4
+ если CNT == 0:
+ вернуться «|»
+ если CNT == 1:
+ вернуть '/'
+ если CNT == 2:
+ вернуть '-'
+ если CNT == 3:
+ вернуть '\\'
+ вернуть ' '
+
Защиту getwork (само данные = нет):
- не save_pool = None
- пытаться:
- если self.pool! = self.primary и self.failback > 0:
- если self.failback_getwork_count >= Self.failback:
- save_pool = self.pool
- self.setpool (self.primary)
- не self.connection = None
- self.sayLine ("Попытка не в состоянии вернуться к первичному бассейну")
- self.failback_getwork_count + 1 =
- если не self.connection:
- self.connection = httplib.HTTPConnection (self.host, строги = True, тайм-аут = TIMEOUT)
- self.postdata [ 'PARAMS'] = if_else (данные, [данных], [])
- (Self.connection, результат) = self.request (self.connection, '/', self.headers, отвалов (self.postdata))
- self.errors = 0
- если self.pool == self.primary:
- self.backup_pool_index = 0
- self.failback_getwork_count = 0
- self.failback_attempt_count = 0
- возвращаемый результат [ «результат»]
- кроме NotAuthorized:
- self.failure ( «Неправильное имя пользователя или пароль»)
- кроме RPCError как е:
- self.say ( '% s', е)
- за исключением (IOError, httplib.HTTPException, ValueError):
- если save_pool:
- self.failback_attempt_count + 1 =
- self.setpool (save_pool)
- self.sayLine ( «Тем не менее не удалось подключиться к основному бассейну (попытка% с), в противном случае над», self.failback_attempt_count)
- self.failback_getwork_count = 0
- вернуть
- self.say ( 'Проблемы сообщающиеся с Bitcoin RPC% s% s', (self.errors, self.tolerance))
- self.errors + 1 =
- если self.errors > self.tolerance + 1:
+ макс = if_else (данные, 2 * RETRIES, RETRIES)
+ для п в диапазоне (1, макс):
+ не save_pool = None
+ пытаться:
+ если self.pool! = self.primary и self.failback > 0:
+ если self.failback_getwork_count >= Self.failback:
+ save_pool = self.pool
+ self.setpool (self.primary)
+ не self.connection = None
+ self.sayLine ("Попытка не в состоянии вернуться к первичному бассейну")
+ self.failback_getwork_count + 1 =
+ если не self.connection:
+ self.connection = httplib.HTTPConnection (self.host, строги = True, тайм-аут = TIMEOUT)
+ self.postdata [ 'PARAMS'] = if_else (данные, [данных], [])
+ (Self.connection, результат) = self.request (self.connection, '/', self.headers, отвалов (self.postdata))
self.errors = 0
- если self.backup_pool_index >= Len (self.backup):
- self.sayLine ("Нет больше резервные бассейны остались. Использование первичных и начать сначала.")
- бассейн = self.primary
+ если self.pool == self.primary:
self.backup_pool_index = 0
- еще:
- Бассейн = self.backup [self.backup_pool_index]
- self.backup_pool_index + 1 =
- self.setpool (бассейн)
+ self.failback_getwork_count = 0
+ self.failback_attempt_count = 0
+ возвращаемый результат [ «результат»]
+ кроме NotAuthorized:
+ self.failure ( «Неправильное имя пользователя или пароль»)
+ вернуть
+ кроме RPCError как е:
+ self.say ( '% s', е)
+ за исключением (IOError, httplib.HTTPException, ValueError):
+ если save_pool:
+ self.failback_attempt_count + 1 =
+ self.setpool (save_pool)
+ self.sayLine ( «Тем не менее не удалось подключиться к основному бассейну (попытка% с), в противном случае над», self.failback_attempt_count)
+ self.failback_getwork_count = 0
+ вернуть
+ если п == макс:
+ self.say ( 'Проблемы сообщающиеся с Bitcoin RPC% s% s', (self.errors, self.tolerance))
+ self.errors + 1 =
+ если self.errors > self.tolerance + 1:
+ self.errors = 0
+ если self.backup_pool_index >= Len (self.backup):
+ self.sayLine ("Нет больше резервные бассейны остались. Использование первичных и начать сначала.")
+ бассейн = self.primary
+ self.backup_pool_index = 0
+ еще:
+ Бассейн = self.backup [self.backup_pool_index]
+ self.backup_pool_index + 1 =
+ self.setpool (бассейн)
+ если (self.connection):
+ self.connection.close ()
+ не self.connection = None
+ self.say ( 'Пожалуйста, подождите:% s', self.getAscii (п))
+ сон (0,50)
Защита setpool (я, бассейн):
self.pool = бассейн
@@ -408,7 +434,7 @@
cl.enqueue_write_buffer (очередь, output_buf, выход)
если self.updateTime == '':
- если noncesLeft < (ТАЙМАУТ + 1) * * globalThreads self.frames:
+ если noncesLeft < (АУТ + 1) * self.currentrate * 1000:
self.update = True
noncesLeft + = 0xFFFFFFFFFFFF
Элиф 0xFFFFFFFFFFF < noncesLeft < 0xFFFFFFFFFFFF: