2017-07-24 117 views
0

我写了litte加密切换器,它检查利润和开关矿工。但它有一段时间,然后循环停止没有任何错误(它可能会工作15分钟或20小时,但它会停止,测试10天)。无限while循环有时打破

代码:

import os 
import subprocess 
import time 
import copy 
import requests 
import configparser 
from datetime import datetime 


def config_read(): 
    config = configparser.ConfigParser() 
    config.read('config.ini') 
    return config.sections 


def start_miner(info): 
    if info['algorithm'] == 'Equihash': 
     subprocess.Popen('F:\Claymore\start — music — Peon.bat', cwd='F:\Claymore', 
         creationflags=subprocess.CREATE_NEW_CONSOLE) 
    elif info['algorithm'] == 'Ethash': 
     subprocess.Popen('F:\Claymore\start — music — Peon.bat', cwd='F:\Claymore', 
         creationflags=subprocess.CREATE_NEW_CONSOLE) 
    return info 


def stop_miner(): 
    os.system("taskkill /f /t /im miner.exe") 
    os.system("taskkill /f /t /im EthDcrMiner64.exe") 


def request_coins(): 
    coins = None 
    while coins is None: 
     try: 
      coins = ((requests.get(
       url='https://whattomine.com/coins.json?utf8=✓&eth=true&factor%5Beth_hr%5D=79.0&factor%5Beth_p%5D=0.0&factor%5Bgro_hr%5D=0.0&factor%5Bgro_p%5D=0.0&factor%5Bx11g_hr%5D=20.0&factor%5Bx11g_p%5D=0.0&factor%5Bcn_hr%5D=0.0&factor%5Bcn_p%5D=0.0&eq=true&factor%5Beq_hr%5D=1000.0&factor%5Beq_p%5D=0.0&factor%5Blrev2_hr%5D=80000.0&factor%5Blrev2_p%5D=0.0&factor%5Bns_hr%5D=0.0&factor%5Bns_p%5D=0.0&factor%5Blbry_hr%5D=0.0&factor%5Blbry_p%5D=0.0&factor%5Bbk2b_hr%5D=0.0&factor%5Bbk2b_p%5D=0.0&factor%5Bbk14_hr%5D=0.0&factor%5Bbk14_p%5D=0.0&factor%5Bpas_hr%5D=0.0&factor%5Bpas_p%5D=0.0&bkv=true&factor%5Bbkv_hr%5D=0.0&factor%5Bbkv_p%5D=0.0&factor%5Bcost%5D=0.06&sort=Profitability24&volume=0&revenue=24h&factor%5Bexchanges%5D%5B%5D=&factor%5Bexchanges%5D%5B%5D=bittrex&factor%5Bexchanges%5D%5B%5D=bleutrade&factor%5Bexchanges%5D%5B%5D=btc_e&factor%5Bexchanges%5D%5B%5D=bter&factor%5Bexchanges%5D%5B%5D=c_cex&factor%5Bexchanges%5D%5B%5D=cryptopia&factor%5Bexchanges%5D%5B%5D=poloniex&factor%5Bexchanges%5D%5B%5D=yobit&dataset=Main&commit=Calculate&adapt_q_280x=0&adapt_q_380=0&adapt_q_fury=0&adapt_q_470=0&adapt_q_480=0&adapt_q_750Ti=0&adapt_q_10606=3&adapt_q_1070=0&adapt_q_1080=0&adapt_q_1080Ti=0%27')).json())[ 
      'coins'] 
     except: 
      print("Site didn't respond. Reconnecting in 10 sec") 
      time.sleep(10) 
    return coins 


def miner_chose(config, info): 
    user_coins = {} 
    coins = request_coins() 
    for key, value in config['Currency'].items(): 
     if value == 'True': 
      tag = key.upper() 
      for key_coin, value_coin in coins.items(): 
       if value_coin['tag'] == info['temp_currency']: 
        info['temp_profit'] = value_coin['btc_revenue24'] 
       if value_coin['tag'] == info['currency']: 
        info['profit'] = value_coin['btc_revenue24'] 
       if value_coin['tag'] == tag: 
        user_coins[key_coin] = value_coin 
    for key, value in user_coins.items(): 
     if float(value['btc_revenue24']) >= float(info['profit']) * (float(config['CheckOptions']['profitprocent']) +100)/100: 
      if not info['currency'] == value['tag']: 
       if float(value['btc_revenue24']) > float(info['temp_profit']): 
        if not info['temp_currency'] == value['tag']: 
         info['check_times'] = 0 
        info['temp_profit'] = value['btc_revenue24'] 
        info['temp_currency'] = value['tag'] 
       info['check_times'] += 1 
       if int(info['check_times']) >= int(config['CheckOptions']['times']): 
        info['profit'] = value['btc_revenue24'] 
        info['currency'] = value['tag'] 
        info['algorithm'] = value['algorithm'] 
        info['check_times'] = 0 
    return info 

的代码的一部分,虽然循环使用和停止:

def main(): 
    info = {'profit': 0, 'check_times': 200, 'currency': None, 'temp_profit': 0, 'temp_currency': None} 
    config = config_read() 

    while True: 
     if info['profit'] == 0: 
      stop_miner() 
      info = start_miner(miner_chose(config,info)) 
      print(str(datetime.now()) + " - Starting miner first time. Currency: " + info['currency'] + '. Profit: ' + 
        info['profit'] + ' BTC/Day') 
      time.sleep(int(config['CheckOptions']['period']) * 60) 
     else: 
      old_info = copy.deepcopy(info) 
      info = miner_chose(config, info) 
      print(
       str(datetime.now()) + ' - Checking profit. Current currency: ' + info['currency'] + '. Profit: ' + info[ 
        'profit'] + ' BTC/Day') 
      if info['currency'] != old_info['currency']: 
       print('Changing miner. Currency ' + info['currency'] + '. Profit: ' + info['profit'] + ' BTC/Day') 
      elif info['currency'] == old_info['currency']: 
       print('Curency SAME') 
       # stop_miner() 
       # start_miner(info) 
      time.sleep(int(config['CheckOptions']['period']) * 60) 

我想要睡觉time.sleep(int(config['CheckOptions']['period']) * 60)脚本后,必须重新开始,再次使所有的检查,但有时候剧本睡眠对于我已经放入配置的时间并且不想再次检查。它可能在10或20次检查后停止,没有任何错误。

+0

什么循环?有多个。 –

+3

这是太多的代码。只发布相关部分并明确描述问题 –

+0

请留下完整的代码,但添加停止的while循环。 – Hellbea

回答

0

需要添加到coins = ((requests.get(url='https://whattomine.com/coins.json', timeout=3)).json())['coins']导致服务器堆栈并且不发送响应。