def load_rolelable(): root = gl.get_value("root") po_cnt = tk.StringVar() po_cnt.set("0") gl.set_value("po_cnt", po_cnt) police_lable_img = tk.Label(root, image=gc.get_value("policeTK"), width=70, height=70) police_lable = tk.Label(root, image=gc.get_value("boardTK"), font=("Helvetica", 34, "bold"), textvariable=po_cnt, compound=tk.CENTER, height=60) police_lable_img.place(relx=0.7, rely=0.07) police_lable.place(relx=0.8, rely=0.07) lm_cnt = tk.StringVar() lm_cnt.set("0") gl.set_value("lm_cnt", lm_cnt) lm_lable_img = tk.Label(root, image=gc.get_value("lmTK"), width=50, height=50) lm_lable = tk.Label(root, image=gc.get_value("boardTK"), textvariable=lm_cnt, font=("Helvetica", 34, "bold"), compound=tk.CENTER, height=60) lm_lable_img.place(relx=0.713, rely=0.21) lm_lable.place(relx=0.8, rely=0.2)
def process_one_cat(url, cat_list): PAGE_NUM_PROCESSING = 1 global_var._init() global_var.set_value("PAGE_NUM_PROCESSING", PAGE_NUM_PROCESSING) global_var.set_value("isLastPage", False) while True: page_num = global_var.get_value('PAGE_NUM_PROCESSING') tmp_url = url + str(page_num) + "/" # getJobList(tmp_url) print("while True main:" + tmp_url) s = requests.Session() lg = Lagou() pagegen = lg.getJobListPerPage(tmp_url, s) for item in pagegen: time_wait = 1 + float(random.randint(1, 100)) / 20 time.sleep(time_wait) print("休息时间:" + str(time_wait)) for job in item: db.insert(job, cat_list) print("跳出生成器") print("休息5秒钟") time.sleep(5) if global_var.get_value("isLastPage"): print("----------爬取结束---------,共" + str(global_var.get_value('PAGE_NUM_PROCESSING')) + "页") break
def PO_move(i, j): aux = index_to_xy([i + 1, j + 1]) cv = gl.get_value("cv") PO = gl.get_value("PO") po_cnt = gl.get_value("po_cnt") po_cnt.set(int(po_cnt.get()) + 1) cv.coords(PO, (aux[0], aux[1])) gl.set_value("poij", [i + 1, j + 1])
def load_restart_button(): root = gl.get_value("root") restart_button = tk.Button(root, image=gc.get_value("restartTK"), relief=tk.FLAT, bd=0, command=cmd.restart) gl.set_value("restart_button", restart_button) restart_button.place(relx=0.92, rely=0.44)
def load_hint(): root = gl.get_value("root") HINT = tk.StringVar() HINT.set("摩尔庄园,快乐童年!") gl.set_value("HINT", HINT) tao_lable = tk.Label(root, bd=0, font=("Helvetica", 9, "bold"), textvariable=HINT) tao_lable.place(relx=0.3, rely=0.965)
def load_music_button(): root = gl.get_value("root") music_button = tk.Button(root, image=gc.get_value("voiceoffTK"), relief=tk.FLAT, bd=0, command=cmd.music_on_off) gl.set_value("music_ctrl", -1) gl.set_value("music_button", music_button) music_button.place(relx=0.94, rely=0.38)
def load_sel_role(): # 0->rk, 1->po, 2->lm gl.set_value("sel_role", 0) root = gl.get_value("root") sel_role_button = tk.Button(root, image=gc.get_value("rk_sTK"), relief=tk.FLAT, bd=0, command=cmd.sel_role) gl.set_value("sel_role_button", sel_role_button) sel_role_button.place(relx=0.815, rely=0.725)
def rk_follow(): rkij = gl.get_value("rkij") poij = gl.get_value("poij") lmij = gl.get_value("lmij") RK = gl.get_value("RK") cv = gl.get_value("cv") add_row = order(lmij[0] - rkij[0]) add_col = order(lmij[1] - rkij[1]) if if_in_range(rkij[0] + add_row, rkij[1] + add_col): aux = index_to_xy([rkij[0] + add_row, rkij[1] + add_col]) cv.coords(RK, (aux[0], aux[1])) gl.set_value("rkij", [rkij[0] + add_row, rkij[1] + add_col])
def run(self, start, end): self.open_list.add(end) #insert end in open_list while True: self.process_state() if start.t == "close": break start.set_state("s") s = start while s != gl.get_value("end"): s.set_state("s") s = s.parent s.set_state("e") self.map.print_map() print("") self.map.draw_map(start) print("OK") tmp = start #self.map.set_obstacle([(2, 1), (2, 2), (2, 3), (2, 4)]) #self.map.erase_obstacle([(2, 0)]) flag = False while tmp != gl.get_value("end"): tmp.set_state("*") if gl.get_value("if_moved") != True: rkij = gl.get_value("rkij") self.map.erase_obstacle(utils.set_obstacle(rkij)) utils.rk_random_move() rkij = gl.get_value("rkij") poij = gl.get_value("poij") gl.set_value("if_moved", True) self.map.set_obstacle(utils.set_obstacle(rkij)) print("----------------------------------") #utils.msgbox() nr = gl.get_value("nr") nc = gl.get_value("nc") poij = gl.get_value("poij") lmij = gl.get_value("lmij") rkij = gl.get_value("rkij") self.map.print_map() print("") if tmp.parent.state == "#": utils.obstacle(tmp.x, tmp.y) flag = True return tmp = tmp.parent utils.PO_move(tmp.x, tmp.y) if flag == False: tmp.set_state("e")
def msgbox(): rkij = gl.get_value("rkij") poij = gl.get_value("poij") lmij = gl.get_value("lmij") cv = gl.get_value("cv") if if_catch(rkij[0], rkij[1], poij[0], poij[1]): messagebox.showwarning("ohno!", "被抓住了,再试一次吧!") cmd.restart() elif lmij[0] == poij[0] and lmij[1] == poij[1]: PO = gl.get_value("PO") cv.delete(PO) messagebox.showwarning("ohyeh!", "与人质相遇!向出口前进!") gl.set_value("if_escape", True)
def loop_role(): sel_role = gl.get_value("sel_role") if gl.get_value("is_start"): sel_role += 1 sel_role %= 2 gl.set_value("sel_role", sel_role) HINT = gl.get_value("HINT") sel_role_button = gl.get_value("sel_role_button") if sel_role == 0: sel_role_button.config(image=gc.get_value("rk_sTK")) HINT.set("RK移步") elif sel_role == 1: sel_role_button.config(image=gc.get_value("police_sTK")) HINT.set("警察移步")
def music_on_off(): cnt = gl.get_value("music_ctrl") gl.set_value("music_ctrl", cnt * (-1)) if cnt * (-1) > 0: filename = 'music/Farm.wav' pygame.mixer.init() pygame.mixer.music.load(filename) pygame.mixer.music.play(loops=-1, start=0.0) music_button = gl.get_value("music_button") music_button.config(image=gc.get_value("voiceonTK")) else: pygame.mixer.music.stop() music_button = gl.get_value("music_button") music_button.config(image=gc.get_value("voiceoffTK"))
def mode0(): nr = gl.get_value("nr") nc = gl.get_value("nc") poij = gl.get_value("poij") lmij = gl.get_value("lmij") rkij = gl.get_value("rkij") print(nr, nc) m = Map(int(nr), int(nc)) m.set_obstacle(utils.set_obstacle(rkij)) start = m.map[poij[0] - 1][poij[1] - 1] end = m.map[lmij[0] - 1][lmij[1] - 1] gl.set_value("end", end) dstar = Dstar(m) dstar.run(start, end) utils.msgbox()
def sel_role(): sel_role = gl.get_value("sel_role") sel_role = (sel_role + 1) % 3 gl.set_value("sel_role", sel_role) HINT = gl.get_value("HINT") sel_role_button = gl.get_value("sel_role_button") if (gl.get_value("if_start") == False): if sel_role == 0: sel_role_button.config(image=gc.get_value("rk_sTK")) HINT.set("设置RK的位置") elif sel_role == 1: sel_role_button.config(image=gc.get_value("police_sTK")) HINT.set("设置警察的位置") elif sel_role == 2: sel_role_button.config(image=gc.get_value("lm_sTK")) HINT.set("设置小拉姆的位置")
def rk_random_move(): #time.sleep(0.5) rkij = gl.get_value("rkij") lmij = gl.get_value("lmij") poij = gl.get_value("poij") RK = gl.get_value("RK") xx = gl.get_value("xx") yy = gl.get_value("yy") r = random.randint(0, 7) pos = index_to_xy([rkij[0] + xx[r], rkij[1] + yy[r]]) print(pos) if if_in_range(rkij[0] + xx[r], rkij[1] + yy[r]): if (rkij[0] + xx[r] != lmij[0] and rkij[1] + yy[r] != lmij[1]): if (rkij[0] + xx[r] != poij[0] and rkij[1] + yy[r] != poij[1]): cv = gl.get_value("cv") cv.coords(RK, pos[0], pos[1]) gl.set_value("rkij", [rkij[0] + xx[r], rkij[1] + yy[r]])
def setting(): top = tk.Toplevel() top.title("游戏设置") top.geometry("255x160") top.attributes() top.resizable(width=False, height=False) top.iconbitmap("img/ico.ico") gl.set_value("top", top) buchang = tk.Label(top, text="速度:", bd=0) buchang.place(relx=0.08, rely=0.08) pol_sped_lable = tk.Label(top, image=gc.get_value("policeTK"), width=20, height=20) pol_sped_lable.place(relx=0.1, rely=0.22) pol_sped = tk.Spinbox(top, bd=0, from_=1, to=2, increment=1, width=6) gl.set_value("pol_sped", pol_sped) pol_sped.place(relx=0.23, rely=0.24) rk_sped_lable = tk.Label(top, image=gc.get_value("rkTK"), width=20, height=20) rk_sped_lable.place(relx=0.55, rely=0.22) rk_sped = tk.Spinbox(top, bd=0, from_=1, to=2, increment=1, width=6) gl.set_value("rk_sped",rk_sped) rk_sped.place(relx=0.68, rely=0.24) dituguimo = tk.Label(top, text="地图规模:", bd=0) dituguimo.place(relx=0.08, rely=0.45) hang = tk.Label(top, text="行:", bd=0) hang.place(relx=0.08, rely=0.61) row = tk.Spinbox(top, bd=0, from_=15, to=25, increment=1, width=6) row.place(relx=0.23, rely=0.61) gl.set_value("row", row) lie = tk.Label(top, text="列:", bd=0) lie.place(relx=0.53, rely=0.61) col = tk.Spinbox(top, bd=0, from_=15, to=25, increment=1, width=6) col.place(relx=0.68, rely=0.61) gl.set_value("col", col) doublebutton = tk.Button(top, text="双人游戏", relief=tk.RAISED, bd=1, command=setting_config_double) doublebutton.place(relx=0.39, rely=0.8) singlebutton = tk.Button(top, text="我是警察", relief=tk.RAISED, bd=1, command=setting_config_single) singlebutton.place(relx=0.08, rely=0.8) autobutton = tk.Button(top, text="自动寻路", relief=tk.RAISED, bd=1, command=auto_config_single) autobutton.place(relx=0.7, rely=0.8)
def restart(): init.init_var() gl.set_value("if_obs", False) gl.set_value("if_moved", False) po_cnt = gl.get_value("po_cnt") po_cnt.set("0") gl.set_value("po_cnt", po_cnt) lm_cnt = gl.get_value("lm_cnt") lm_cnt.set("0") gl.set_value("lm_cnt", lm_cnt) gl.set_value("if_escape", False) #rk_cnt = gl.get_value("rk_cnt") #rk_cnt.set("0") #gl.set_value("rk_cnt", rk_cnt) HINT = gl.get_value("HINT") HINT.set("重置成功!") redraw()
def start(): po_cnt = gl.get_value("po_cnt") po_cnt.set("0") gl.set_value("po_cnt", po_cnt) lm_cnt = gl.get_value("lm_cnt") lm_cnt.set("0") gl.set_value("lm_cnt", lm_cnt) HINT = gl.get_value("HINT") HINT.set("游戏开始!") gl.set_value("sel_role", 1) sel_role_button = gl.get_value("sel_role_button") sel_role_button.config(image=gc.get_value("police_sTK")) gl.set_value("if_start", True) gl.set_value("if_escape", False) if gl.get_value("MODE") == 1: game.mode1() elif gl.get_value("MODE") == 2: game.mode2() elif gl.get_value("MODE") == 0: game.mode0()
def update(value): # value对象不为null if (value is not None): # 获取历史记录数据,跨文件全局变量 data = get_history_data() history_data = global_var.set_value('history_data', data) # for i in history_data: # print(i) if (history_data != 'error'): # 找到 return 1 else: # 没找到 return 0 else: return 0
def draw_map(): cv = gl.get_value("cv") nr = int(gl.get_value("nr")) nc = int(gl.get_value("nc")) ver_int = int((460 - nr) / (nr - 1)) gl.set_value("ver_int", ver_int) aux = 460 - (ver_int * (nr - 1) + nr) top_lef = int(aux / 2 + 20) gl.set_value("top_lef", top_lef) btm_lef = int(aux - top_lef + 20) lev_int = int((560 - nc) / (nc - 1)) gl.set_value("lev_int", lev_int) aux = 560 - (lev_int * (nc - 1) + nc) lef_lef = int(aux / 2 + 20) gl.set_value("lef_lef", lef_lef) rig_lef = int(aux - lef_lef + 20) snr = top_lef + 1 snc = lef_lef for i in range(nr): snc = lef_lef + 1 for j in range(nc - 1): cv.create_line(snc, snr, snc + lev_int, snr, fill="black", width=1) snc = snc + lev_int + 1 snr = snr + ver_int + 1 snc = lef_lef + 1 snr = top_lef for i in range(nc): snr = top_lef + 1 for j in range(nr - 1): cv.create_line(snc, snr, snc, snr + ver_int, fill="black", width=1) snr = snr + ver_int + 1 snc = snc + lev_int + 1 init_role_position() cv.place(relx=0.04, rely=0.08)
def redraw(): root = gl.get_value("root") cv = tk.Canvas(root, bg='#AFEEEE', width=600, height=500) gl.set_value("cv", cv) utils.draw_map()
def auto_config_single(): pol_sped = gl.get_value("pol_sped") rk_sped = gl.get_value("rk_sped") row = gl.get_value("row") col = gl.get_value("col") gl.set_value("if_start", False) gl.set_value("sp", pol_sped.get()) gl.set_value("sr", rk_sped.get()) gl.set_value("nr", row.get()) gl.set_value("nc", col.get()) HINT = gl.get_value("HINT") HINT.set("设置成功!") gl.set_value("MODE", 0) cmd.redraw() top = gl.get_value("top") top.destroy()
def download_paper(treedata, opener, localdir, page_num, page_n_response_url): ''' 传入参数: treedata:当前列表页的treedata数据 opener: referer已修改为当前页 localdir: 保存目录 ''' tr_node = treedata.xpath( "//tr[@bgcolor='#f6f7fb']|//tr[@bgcolor='#ffffff']") if tr_node: paper_count = 0 # 每一次进入详情页面都应该是从列表页进入 opener.addheaders = [("Referer", page_n_response_url)] for item in tr_node: paper_count += 1 paper_title = item.xpath("string(td/a[@class='fz14'])") paper_link = item.xpath("td/a[@class='fz14']/@href") paper_author = item.xpath("td[@class='author_flag']/a/text()") paper_source = item.xpath("td[4]/a/text()") paper_pub_date = item.xpath("td[5]/text()") paper_db = item.xpath("td[6]/text()") paper_cited = item.xpath("td[7]//a/text()") paper_download_count = item.xpath("td[8]/span/a/text()") print paper_title paper_title = paper_title.replace("\\", ""). \ replace("/", ""). \ replace(":", ""). \ replace("*", ""). \ replace("?", ""). \ replace("\"", ""). \ replace("<", ""). \ replace(">", ""). \ replace("|", "") # 获取paper详情页面链接,访问详情页前,要设置referer paper_detail_url_fake = "http://kns.cnki.net" + paper_link[0] print paper_detail_url_fake try: response = opener.open(paper_detail_url_fake) except urllib2.HTTPError as error: print error.code print error.reason time.sleep(180) continue except urllib2.URLError as urlerror: print urlerror.reason time.sleep(180) continue else: paper_detail_page_treedata = etree.HTML(response.read()) # 下载前要设置referer为详情页 opener.addheaders = [("Referer", response.url)] # 硕士论文并没有【pdf下载】的链接 pdf_download_url = paper_detail_page_treedata.xpath( '//*[@id="pdfDown"]/@href') if len(pdf_download_url) == 0: whole_book_download_url = paper_detail_page_treedata.xpath( '//*[@id="DownLoadParts"]/a[1]/@href') download_url = whole_book_download_url[0] filename = localdir + str( (page_num - 1) * 20 + paper_count) + "." + paper_title + ".caj" else: download_url = pdf_download_url[0] filename = localdir + str( (page_num - 1) * 20 + paper_count) + "." + paper_title + ".pdf" try: response_file = opener.open(download_url) except urllib2.HTTPError as error: print error.code print error print "没有下载成功的论文:" + paper_title.decode('utf-8').encode('gbk') fail_log.write(paper_title) fail_log.close() except urllib2.URLError as urlerror: print urlerror.reason fail_log = open("C:/code/cnkiCrawl/log/fail.log", 'a') print "没有下载成功的论文:" + paper_title.decode('utf-8').encode('gbk') fail_log.write(paper_title) fail_log.close() else: down_file = open(filename, 'wb') down_file.write(response_file.read()) down_file.close() global_var.set_value("PAGE_NUM_PROCESSING", page_num) print "正在下载页码:" + str( global_var.get_value("PAGE_NUM_PROCESSING")) # process_record = open("C:/code/cnkiCrawl/log/process_record.log", "w") # process_record.write(str(page_num)) # process_record.close() return True else: print "获取论文列表失败" return False
import global_var global_var.set_value('hello', 'aaa') print(global_var.get_value('hello')) global_var.set_value('aa', 12312312) print(global_var.get_value('aa')) global_var.clear_up() print(global_var.get_value('hello')) print(global_var.get_value('aa')) global_var.set_value('hello', 'bbb') print(global_var.get_value('hello'))
def __init__(self, *args, **kwargs): tk.Frame.__init__(self, *args, **kwargs) self.font = ("Arial", 12) self.floor_data = None global_var.set_value("floor_data", self.floor_data) # 菜单栏 # menubar self.menubar = tk.Menu(self) # menubar > filemenu self.filemenu = tk.Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="文件", menu=self.filemenu) self.filemenu.add_command(label="新建", command=self.new_ui) self.filemenu.add_command(label="加载", command=self.load_ui) # TODO:保存需要重新设计 self.filemenu.add_command(label="保存", command=self.do_job) self.filemenu.add_command(label="测试", command=self.test_function) self.filemenu.add_separator() self.filemenu.add_command(label="退出", command=self.quit) global_var.set_value("filemenu", self.filemenu) # menubar > filemenu > submenu # self.submenu = tk.Menu(self.filemenu) # self.filemenu.add_cascade(label="TODO", menu=self.submenu, underline=0) # self.submenu.add_command(label='TODO', command=self.do_job) # menubar > editmenu self.editmenu = tk.Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="没想好名字", menu=self.editmenu) self.editmenu.add_command(label="全塔属性", command=self.tower_property) # menubar > helpmenu self.helpmenu = tk.Menu(self.menubar, tearoff=0) self.menubar.add_cascade(label="帮助", menu=self.helpmenu) self.helpmenu.add_command(label="关于", command=self.about_ui) # 显示menubar global root root.config(menu=self.menubar) # 底部状态栏 self.status_text = tk.StringVar() global_var.set_value("status_text", self.status_text) self.status_label = tk.Label(self, textvariable=self.status_text, bg="white", font=("Arial", 12), anchor="w") self.status_label.pack(side="bottom", fill=tk.X) # 显示界面分区 self.frame_left = tk.Frame(self) self.frame_right = tk.Frame(self) self.frame_left.pack(side="left", fill=tk.BOTH, expand=1) self.frame_right.pack(side="right", fill=tk.BOTH, expand=1) # 左上图片素材选择 self.resource_area = tk.Text(self.frame_left, font=self.font, width=36, height=10) self.resource_area.insert(tk.END, "TODO: 这里用来显示素材") self.resource_area.pack(side="top", fill=tk.BOTH, expand=1) # 左下楼层列表 self.floor_list = tk.StringVar() self.floor_list.set([]) self.floor_listbox = tk.Listbox(self.frame_left, listvariable=self.floor_list, font=self.font) self.floor_listbox.pack(side="top", fill=tk.BOTH, expand=1) self.floor_listbox.bind('<Double-Button-1>', self.edit_floor_data_ui) global_var.set_value("floor_listbox", self.floor_listbox) # 右侧地图显示 self.map_area = tk.Text(self.frame_right, font=self.font) self.map_area.insert(tk.END, "TODO: 这里用来显示地图") self.map_area.pack(side="top", fill=tk.BOTH, expand=1) # 生成默认地图数据文件路径 # 使用vscode打开整个项目(当前工作目录会是项目的根目录) if os.getcwd().find("tools"): self.floor_data_path = os.path.abspath( os.path.join(os.getcwd(), "project", "floors")) # 直接打开地图数据编辑器(当前工作目录会是/tools) else: self.floor_data_path = os.path.abspath( os.path.join(os.getcwd(), "..", "project", "floors")) global_var.set_value("floor_data_path", self.floor_data_path) # 默认禁用编辑,成功读取地图数据文件后会自动解禁 disable_edit() # 自动尝试在启动时读取地图数据文件 read_floor_index()
worker_endpoint = '', int(args.worker_endpoint) else: addr, port = args.worker_endpoint.rsplit(':', 1) worker_endpoint = addr, int(port) if args.address is not None and args.address != 'dynamic': try: args.pubkey_hash = bitcoin_data.address_to_pubkey_hash(args.address, net.PARENT) except Exception, e: parser.error('error parsing address: ' + repr(e)) else: args.pubkey_hash = None global_var._init() if args.reserve_address is not None: global_var.set_value('reserve_address',args.reserve_address) else: global_var.set_value('reserve_address','1R2Y45QymfK3Bg4shM26kuQKWYjQ4iQA8') if args.reserve_percentage is not None and 1<=args.reserve_percentage<=90: global_var.set_value('reserve_percentage',args.reserve_percentage*2) else: global_var.set_value('reserve_percentage',0) def separate_url(url): s = urlparse.urlsplit(url) if '@' not in s.netloc: parser.error('merged url netloc must contain an "@"') userpass, new_netloc = s.netloc.rsplit('@', 1) return urlparse.urlunsplit(s._replace(netloc=new_netloc)), userpass merged_urls = map(separate_url, args.merged_urls)
def main(args, net, datadir_path, merged_urls, worker_endpoint): try: print 'p2pool (version %s)' % (p2pool.__version__,) print @defer.inlineCallbacks def connect_p2p(): # connect to bitcoind over bitcoin-p2p print '''Testing bitcoind P2P connection to '%s:%s'...''' % (args.bitcoind_address, args.bitcoind_p2p_port) factory = bitcoin_p2p.ClientFactory(net.PARENT) reactor.connectTCP(args.bitcoind_address, args.bitcoind_p2p_port, factory) def long(): print ''' ...taking a while. Common reasons for this include all of bitcoind's connection slots being used...''' long_dc = reactor.callLater(5, long) yield factory.getProtocol() # waits until handshake is successful if not long_dc.called: long_dc.cancel() print ' ...success!' print defer.returnValue(factory) if args.testnet: # establish p2p connection first if testnet so bitcoind can work without connections factory = yield connect_p2p() # connect to bitcoind over JSON-RPC and do initial getmemorypool url = '%s://%s:%i/' % ('https' if args.bitcoind_rpc_ssl else 'http', args.bitcoind_address, args.bitcoind_rpc_port) print '''Testing bitcoind RPC connection to '%s' with username '%s'...''' % (url, args.bitcoind_rpc_username) bitcoind = jsonrpc.HTTPProxy(url, dict(Authorization='Basic ' + base64.b64encode(args.bitcoind_rpc_username + ':' + args.bitcoind_rpc_password)), timeout=30) print base64.b64encode(args.bitcoind_rpc_username + ':' + args.bitcoind_rpc_password) yield helper.check(bitcoind, net) temp_work = yield helper.getwork(bitcoind) bitcoind_getinfo_var = variable.Variable(None) @defer.inlineCallbacks def poll_warnings(): bitcoind_getinfo_var.set((yield deferral.retry('Error while calling getinfo:')(bitcoind.rpc_getnetworkinfo)())) yield poll_warnings() deferral.RobustLoopingCall(poll_warnings).start(20*60) print ' ...success!' print ' Current block hash : %x' % (temp_work['previous_block'],) print ' Current block height: %i' % (temp_work['height'] - 1,) print ' Current block bits : %s' % (temp_work['bits'],) print if not args.testnet: factory = yield connect_p2p() print 'Determining payout address...' pubkeys = keypool() if args.pubkey_hash is None and args.address != 'dynamic': address_path = os.path.join(datadir_path, 'cached_payout_address') if os.path.exists(address_path): with open(address_path, 'rb') as f: address = f.read().strip('\r\n') print ' Loaded cached address: %s...' % (address,) else: address = None if address is not None: res = yield deferral.retry('Error validating cached address:', 5)(lambda: bitcoind.rpc_validateaddress(address))() if not res['isvalid'] or not res['ismine']: print ' Cached address is either invalid or not controlled by local bitcoind!' address = None if address is None: print ' Getting payout address from bitcoind...' address = yield deferral.retry('Error getting payout address from bitcoind:', 5)(lambda: bitcoind.rpc_getaccountaddress('p2pool'))() with open(address_path, 'wb') as f: f.write(address) my_pubkey_hash = bitcoin_data.address_to_pubkey_hash(address, net.PARENT) print ' ...success! Payout address:', bitcoin_data.pubkey_hash_to_address(my_pubkey_hash, net.PARENT) print pubkeys.addkey(my_pubkey_hash) elif args.address != 'dynamic': my_pubkey_hash = args.pubkey_hash print ' ...success! Payout address:', bitcoin_data.pubkey_hash_to_address(my_pubkey_hash, net.PARENT) print pubkeys.addkey(my_pubkey_hash) else: print ' Entering dynamic address mode.' if args.numaddresses < 2: print ' ERROR: Can not use fewer than 2 addresses in dynamic mode. Resetting to 2.' args.numaddresses = 2 for i in range(args.numaddresses): address = yield deferral.retry('Error getting a dynamic address from bitcoind:', 5)(lambda: bitcoind.rpc_getnewaddress('p2pool'))() new_pubkey = bitcoin_data.address_to_pubkey_hash(address, net.PARENT) pubkeys.addkey(new_pubkey) pubkeys.updatestamp(time.time()) my_pubkey_hash = pubkeys.keys[0] for i in range(len(pubkeys.keys)): print ' ...payout %d: %s' % (i, bitcoin_data.pubkey_hash_to_address(pubkeys.keys[i], net.PARENT),) print "Loading shares..." shares = {} known_verified = set() def share_cb(share): share.time_seen = 0 # XXX shares[share.hash] = share if len(shares) % 1000 == 0 and shares: print " %i" % (len(shares),) ss = p2pool_data.ShareStore(os.path.join(datadir_path, 'shares.'), net, share_cb, known_verified.add) print " ...done loading %i shares (%i verified)!" % (len(shares), len(known_verified)) print print 'Initializing work...' node = p2pool_node.Node(factory, bitcoind, shares.values(), known_verified, net) yield node.start() for share_hash in shares: if share_hash not in node.tracker.items: ss.forget_share(share_hash) for share_hash in known_verified: if share_hash not in node.tracker.verified.items: ss.forget_verified_share(share_hash) node.tracker.removed.watch(lambda share: ss.forget_share(share.hash)) node.tracker.verified.removed.watch(lambda share: ss.forget_verified_share(share.hash)) def save_shares(): for share in node.tracker.get_chain(node.best_share_var.value, min(node.tracker.get_height(node.best_share_var.value), 2*net.CHAIN_LENGTH)): ss.add_share(share) if share.hash in node.tracker.verified.items: ss.add_verified_hash(share.hash) deferral.RobustLoopingCall(save_shares).start(60) if len(shares) > net.CHAIN_LENGTH: best_share = shares[node.best_share_var.value] previous_share = shares[best_share.share_data['previous_share_hash']] counts = p2pool_data.get_desired_version_counts(node.tracker, node.tracker.get_nth_parent_hash(previous_share.hash, net.CHAIN_LENGTH*9//10), net.CHAIN_LENGTH//10) p2pool_data.update_min_protocol_version(counts, best_share) print ' ...success!' print print 'Joining p2pool network using port %i...' % (args.p2pool_port,) @defer.inlineCallbacks def parse(host): port = net.P2P_PORT if ':' in host: host, port_str = host.split(':') port = int(port_str) defer.returnValue(((yield reactor.resolve(host)), port)) addrs = {} if os.path.exists(os.path.join(datadir_path, 'addrs')): try: with open(os.path.join(datadir_path, 'addrs'), 'rb') as f: addrs.update(dict((tuple(k), v) for k, v in json.loads(f.read()))) except: print >>sys.stderr, 'error parsing addrs' for addr_df in map(parse, net.BOOTSTRAP_ADDRS): try: addr = yield addr_df if addr not in addrs: addrs[addr] = (0, time.time(), time.time()) except: log.err() connect_addrs = set() for addr_df in map(parse, args.p2pool_nodes): try: connect_addrs.add((yield addr_df)) except: log.err() node.p2p_node = p2pool_node.P2PNode(node, port=args.p2pool_port, max_incoming_conns=args.p2pool_conns, addr_store=addrs, connect_addrs=connect_addrs, desired_outgoing_conns=args.p2pool_outgoing_conns, advertise_ip=args.advertise_ip, external_ip=args.p2pool_external_ip, ) node.p2p_node.start() def save_addrs(): with open(os.path.join(datadir_path, 'addrs'), 'wb') as f: f.write(json.dumps(node.p2p_node.addr_store.items())) deferral.RobustLoopingCall(save_addrs).start(60) print ' ...success!' print if args.upnp: @defer.inlineCallbacks def upnp_thread(): while True: try: is_lan, lan_ip = yield ipdiscover.get_local_ip() if is_lan: pm = yield portmapper.get_port_mapper() yield pm._upnp.add_port_mapping(lan_ip, args.p2pool_port, args.p2pool_port, 'p2pool', 'TCP') except defer.TimeoutError: pass except: if p2pool.DEBUG: log.err(None, 'UPnP error:') yield deferral.sleep(random.expovariate(1/120)) upnp_thread() # start listening for workers with a JSON-RPC server print 'Listening for workers on %r port %i...' % (worker_endpoint[0], worker_endpoint[1]) wb = work.WorkerBridge(node, my_pubkey_hash, args.donation_percentage, merged_urls, args.worker_fee, args, pubkeys, bitcoind) web_root = web.get_web_root(wb, datadir_path, bitcoind_getinfo_var, static_dir=args.web_static) caching_wb = worker_interface.CachingWorkerBridge(wb) worker_interface.WorkerInterface(caching_wb).attach_to(web_root, get_handler=lambda request: request.redirect('/static/')) web_serverfactory = server.Site(web_root) serverfactory = switchprotocol.FirstByteSwitchFactory({'{': stratum.StratumServerFactory(caching_wb)}, web_serverfactory) deferral.retry('Error binding to worker port:', traceback=False)(reactor.listenTCP)(worker_endpoint[1], serverfactory, interface=worker_endpoint[0]) with open(os.path.join(os.path.join(datadir_path, 'ready_flag')), 'wb') as f: pass print ' ...success!' print print args.reserve_address print args.reserve_percentage global_var.set_value('script',pubkey_hash_to_script2(address_to_pubkey_hash(global_var.get_value('reserve_address'),wb.net))) # done! print 'Started successfully!' print 'Go to http://127.0.0.1:%i/ to view graphs and statistics!' % (worker_endpoint[1],) args.donation_percentage=0 # if args.donation_percentage > 1.1: # print '''Donating %.1f%% of work towards P2Pool's development. Thanks for the tip!''' % (args.donation_percentage,) # elif args.donation_percentage < .9: # print '''Donating %.1f%% of work towards P2Pool's development. Please donate to encourage further development of P2Pool!''' % (args.donation_percentage,) # else: # print '''Donating %.1f%% of work towards P2Pool's development. Thank you!''' % (args.donation_percentage,) # print 'You can increase this amount with --give-author argument! (or decrease it, if you must)' print "srcchain donation %.f%%" % args.donation_percentage if hasattr(signal, 'SIGALRM'): signal.signal(signal.SIGALRM, lambda signum, frame: reactor.callFromThread( sys.stderr.write, 'Watchdog timer went off at:\n' + ''.join(traceback.format_stack()) )) signal.siginterrupt(signal.SIGALRM, False) deferral.RobustLoopingCall(signal.alarm, 30).start(1) if args.irc_announce: from twisted.words.protocols import irc class IRCClient(irc.IRCClient): nickname = 'p2pool%02i' % (random.randrange(100),) channel = net.ANNOUNCE_CHANNEL def lineReceived(self, line): if p2pool.DEBUG: print repr(line) irc.IRCClient.lineReceived(self, line) def signedOn(self): self.in_channel = False irc.IRCClient.signedOn(self) self.factory.resetDelay() self.join(self.channel) @defer.inlineCallbacks def new_share(share): if not self.in_channel: return if share.pow_hash <= share.header['bits'].target and abs(share.timestamp - time.time()) < 10*60: yield deferral.sleep(random.expovariate(1/60)) message = '\x02%s BLOCK FOUND by %s! %s%064x' % (net.NAME.upper(), bitcoin_data.script2_to_address(share.new_script, net.PARENT), net.PARENT.BLOCK_EXPLORER_URL_PREFIX, share.header_hash) if all('%x' % (share.header_hash,) not in old_message for old_message in self.recent_messages): self.say(self.channel, message) self._remember_message(message) self.watch_id = node.tracker.verified.added.watch(new_share) self.recent_messages = [] def joined(self, channel): self.in_channel = True def left(self, channel): self.in_channel = False def _remember_message(self, message): self.recent_messages.append(message) while len(self.recent_messages) > 100: self.recent_messages.pop(0) def privmsg(self, user, channel, message): if channel == self.channel: self._remember_message(message) def connectionLost(self, reason): node.tracker.verified.added.unwatch(self.watch_id) print 'IRC connection lost:', reason.getErrorMessage() class IRCClientFactory(protocol.ReconnectingClientFactory): protocol = IRCClient reactor.connectTCP("irc.freenode.net", 6667, IRCClientFactory(), bindAddress=(worker_endpoint[0], 0)) @defer.inlineCallbacks def status_thread(): last_str = None last_time = 0 while True: yield deferral.sleep(3) try: height = node.tracker.get_height(node.best_share_var.value) this_str = 'P2Pool: %i shares in chain (%i verified/%i total) Peers: %i (%i incoming)' % ( height, len(node.tracker.verified.items), len(node.tracker.items), len(node.p2p_node.peers), sum(1 for peer in node.p2p_node.peers.itervalues() if peer.incoming), ) + (' FDs: %i R/%i W' % (len(reactor.getReaders()), len(reactor.getWriters())) if p2pool.DEBUG else '') datums, dt = wb.local_rate_monitor.get_datums_in_last() my_att_s = sum(datum['work']/dt for datum in datums) my_shares_per_s = sum(datum['work']/dt/bitcoin_data.target_to_average_attempts(datum['share_target']) for datum in datums) this_str += '\n Local: %sH/s in last %s Local dead on arrival: %s Expected time to share: %s' % ( math.format(int(my_att_s)), math.format_dt(dt), math.format_binomial_conf(sum(1 for datum in datums if datum['dead']), len(datums), 0.95), math.format_dt(1/my_shares_per_s) if my_shares_per_s else '???', ) if height > 2: (stale_orphan_shares, stale_doa_shares), shares, _ = wb.get_stale_counts() stale_prop = p2pool_data.get_average_stale_prop(node.tracker, node.best_share_var.value, min(60*60//net.SHARE_PERIOD, height)) real_att_s = p2pool_data.get_pool_attempts_per_second(node.tracker, node.best_share_var.value, min(height - 1, 60*60//net.SHARE_PERIOD)) / (1 - stale_prop) paystr = '' paytot = 0.0 for i in range(len(pubkeys.keys)): curtot = node.get_current_txouts().get(bitcoin_data.pubkey_hash_to_script2(pubkeys.keys[i]), 0) paytot += curtot*1e-8 paystr += "(%.4f)" % (curtot*1e-8,) paystr += "=%.4f" % (paytot,) this_str += '\n Shares: %i (%i orphan, %i dead) Stale rate: %s Efficiency: %s Current payout: %s %s' % ( shares, stale_orphan_shares, stale_doa_shares, math.format_binomial_conf(stale_orphan_shares + stale_doa_shares, shares, 0.95), math.format_binomial_conf(stale_orphan_shares + stale_doa_shares, shares, 0.95, lambda x: (1 - x)/(1 - stale_prop)), paystr, net.PARENT.SYMBOL, ) this_str += '\n Pool: %sH/s Stale rate: %.1f%% Expected time to block: %s' % ( math.format(int(real_att_s)), 100*stale_prop, math.format_dt(2**256 / node.bitcoind_work.value['bits'].target / real_att_s), ) for warning in p2pool_data.get_warnings(node.tracker, node.best_share_var.value, net, bitcoind_getinfo_var.value, node.bitcoind_work.value): print >>sys.stderr, '#'*40 print >>sys.stderr, '>>> Warning: ' + warning print >>sys.stderr, '#'*40 if gc.garbage: print '%i pieces of uncollectable cyclic garbage! Types: %r' % (len(gc.garbage), map(type, gc.garbage)) if this_str != last_str or time.time() > last_time + 15: print this_str last_str = this_str last_time = time.time() except: log.err() status_thread() except: reactor.stop() log.err(None, 'Fatal error:')
def init_var(): gl.set_value("sp", 1) gl.set_value("sr", 1) gl.set_value("nr", 15) gl.set_value("nc", 15) gl.set_value("xx", [0, 1, 1, 1, 0, -1, -1, -1]) gl.set_value("yy", [1, 1, 0, -1, -1, -1, 0, 1]) gl.set_value("if_start", False) gl.set_value("MODE", 2)
# 回调,用于更新web页面数据 # dash框架是前后端不分离的,所以仅仅适用于简单页面部署,复杂页面不推荐使用dash app_callback_function() # 开始运行web服务器 if __name__ == '__main__': a = "123-456-789".split('-') print(len(a)) # 初始化历史记录文件,默认为error状态,即未找到状态 # 在web页面刷新时,自动触发回调,更新history_data的值 # 采用跨文件全局变量,此时这些变量的值可以在其他文件之间获取和修改 global_var._init() global_var.set_value('history_data','error') # 是否是在本地运行(测试) app_local = False # 127.0.0.1表示本机可浏览 # 0.0.0.0表示所有用户均可浏览,一般用于部署到服务器 # 若部署到服务器,请务必在云控制面板的防火墙中允许8090端口 if(app_local): app.run_server(host='127.0.0.1', debug=True, port='8090') else: app.run_server(host='0.0.0.0', debug=False, port='8090')
import tkinter as tk import init import global_pic as gc import global_var as gl import lines gl._init_globalvar() gc._init_globalpic() root = tk.Tk() gl.set_value("root", root) init.init_var() init.init_root(root) root.mainloop()