正在显示
1 个修改的文件
包含
33 行增加
和
2 行删除
@@ -368,7 +368,8 @@ class RESTServers(object): | @@ -368,7 +368,8 @@ class RESTServers(object): | ||
368 | self.__nodes = [] | 368 | self.__nodes = [] |
369 | 369 | ||
370 | self.__last_update = datetime.datetime.now(); | 370 | self.__last_update = datetime.datetime.now(); |
371 | - server_ip = "192.168.1.142"; | 371 | + |
372 | + self.__lock = threading.Lock() | ||
372 | 373 | ||
373 | def __get_node(self, device_id): | 374 | def __get_node(self, device_id): |
374 | for node in self.__nodes: | 375 | for node in self.__nodes: |
@@ -416,6 +417,9 @@ class RESTServers(object): | @@ -416,6 +417,9 @@ class RESTServers(object): | ||
416 | def POST(self): | 417 | def POST(self): |
417 | enable_crossdomain() | 418 | enable_crossdomain() |
418 | 419 | ||
420 | + try: | ||
421 | + self.__lock.acquire() | ||
422 | + | ||
419 | req = cherrypy.request.body.read() | 423 | req = cherrypy.request.body.read() |
420 | trace("post to nodes, req=%s"%(req)) | 424 | trace("post to nodes, req=%s"%(req)) |
421 | try: | 425 | try: |
@@ -437,6 +441,8 @@ class RESTServers(object): | @@ -437,6 +441,8 @@ class RESTServers(object): | ||
437 | node.heartbeat = time.time() | 441 | node.heartbeat = time.time() |
438 | 442 | ||
439 | return json.dumps({"code":Error.success, "data": {"id":node.id}}) | 443 | return json.dumps({"code":Error.success, "data": {"id":node.id}}) |
444 | + finally: | ||
445 | + self.__lock.release() | ||
440 | 446 | ||
441 | ''' | 447 | ''' |
442 | id canbe: | 448 | id canbe: |
@@ -455,6 +461,9 @@ class RESTServers(object): | @@ -455,6 +461,9 @@ class RESTServers(object): | ||
455 | def GET(self, id=None, action="play", stream="live/livestream", index=None, local="false", device_id=None): | 461 | def GET(self, id=None, action="play", stream="live/livestream", index=None, local="false", device_id=None): |
456 | enable_crossdomain() | 462 | enable_crossdomain() |
457 | 463 | ||
464 | + try: | ||
465 | + self.__lock.acquire() | ||
466 | + | ||
458 | self.__refresh_nodes() | 467 | self.__refresh_nodes() |
459 | data = self.__json_dump_nodes(self.__nodes) | 468 | data = self.__json_dump_nodes(self.__nodes) |
460 | 469 | ||
@@ -507,6 +516,8 @@ class RESTServers(object): | @@ -507,6 +516,8 @@ class RESTServers(object): | ||
507 | return json.dumps(data) | 516 | return json.dumps(data) |
508 | #return "id=%s, action=%s, stream=%s, url=%s, index=%s, local=%s"%(id, action, stream, url, index, local) | 517 | #return "id=%s, action=%s, stream=%s, url=%s, index=%s, local=%s"%(id, action, stream, url, index, local) |
509 | raise cherrypy.HTTPRedirect(url) | 518 | raise cherrypy.HTTPRedirect(url) |
519 | + finally: | ||
520 | + self.__lock.release() | ||
510 | 521 | ||
511 | def DELETE(self, id): | 522 | def DELETE(self, id): |
512 | enable_crossdomain() | 523 | enable_crossdomain() |
@@ -577,6 +588,10 @@ class RESTNodes(object): | @@ -577,6 +588,10 @@ class RESTNodes(object): | ||
577 | 588 | ||
578 | def __init__(self): | 589 | def __init__(self): |
579 | self.__nodes = [] | 590 | self.__nodes = [] |
591 | + # @remark, if there is shared data, such as the self.__nodes, | ||
592 | + # we must use lock for cherrypy, or the cpu of cherrypy will high | ||
593 | + # and performance suffer. | ||
594 | + self.__lock = threading.Lock() | ||
580 | 595 | ||
581 | def __get_node(self, id): | 596 | def __get_node(self, id): |
582 | for node in self.__nodes: | 597 | for node in self.__nodes: |
@@ -629,6 +644,9 @@ class RESTNodes(object): | @@ -629,6 +644,9 @@ class RESTNodes(object): | ||
629 | def GET(self, type=None, format=None, origin=None, vhost=None, port=None, stream=None, node_id=None): | 644 | def GET(self, type=None, format=None, origin=None, vhost=None, port=None, stream=None, node_id=None): |
630 | enable_crossdomain() | 645 | enable_crossdomain() |
631 | 646 | ||
647 | + try: | ||
648 | + self.__lock.acquire() | ||
649 | + | ||
632 | self.__refresh_nodes() | 650 | self.__refresh_nodes() |
633 | data = self.__json_dump_nodes(self.__nodes) | 651 | data = self.__json_dump_nodes(self.__nodes) |
634 | 652 | ||
@@ -671,10 +689,15 @@ class RESTNodes(object): | @@ -671,10 +689,15 @@ class RESTNodes(object): | ||
671 | }}) | 689 | }}) |
672 | 690 | ||
673 | return json.dumps({"code":Error.success, "data": data}) | 691 | return json.dumps({"code":Error.success, "data": data}) |
692 | + finally: | ||
693 | + self.__lock.release() | ||
674 | 694 | ||
675 | def PUT(self): | 695 | def PUT(self): |
676 | enable_crossdomain() | 696 | enable_crossdomain() |
677 | 697 | ||
698 | + try: | ||
699 | + self.__lock.acquire() | ||
700 | + | ||
678 | req = cherrypy.request.body.read() | 701 | req = cherrypy.request.body.read() |
679 | trace("put to nodes, req=%s"%(req)) | 702 | trace("put to nodes, req=%s"%(req)) |
680 | try: | 703 | try: |
@@ -708,10 +731,15 @@ class RESTNodes(object): | @@ -708,10 +731,15 @@ class RESTNodes(object): | ||
708 | res = json.dumps({"code":Error.success, "data": {"id":node.id, "peers":peers_data}}) | 731 | res = json.dumps({"code":Error.success, "data": {"id":node.id, "peers":peers_data}}) |
709 | trace(res) | 732 | trace(res) |
710 | return res | 733 | return res |
734 | + finally: | ||
735 | + self.__lock.release() | ||
711 | 736 | ||
712 | def POST(self): | 737 | def POST(self): |
713 | enable_crossdomain() | 738 | enable_crossdomain() |
714 | 739 | ||
740 | + try: | ||
741 | + self.__lock.acquire() | ||
742 | + | ||
715 | req = cherrypy.request.body.read() | 743 | req = cherrypy.request.body.read() |
716 | trace("post to nodes, req=%s"%(req)) | 744 | trace("post to nodes, req=%s"%(req)) |
717 | try: | 745 | try: |
@@ -736,6 +764,8 @@ class RESTNodes(object): | @@ -736,6 +764,8 @@ class RESTNodes(object): | ||
736 | res = json.dumps({"code":Error.success, "data": {"id":node.id, "peers":peers_data}}) | 764 | res = json.dumps({"code":Error.success, "data": {"id":node.id, "peers":peers_data}}) |
737 | trace(res) | 765 | trace(res) |
738 | return res | 766 | return res |
767 | + finally: | ||
768 | + self.__lock.release() | ||
739 | 769 | ||
740 | def OPTIONS(self, *args, **kwargs): | 770 | def OPTIONS(self, *args, **kwargs): |
741 | enable_crossdomain() | 771 | enable_crossdomain() |
@@ -966,7 +996,8 @@ conf = { | @@ -966,7 +996,8 @@ conf = { | ||
966 | 'server.socket_port': port, | 996 | 'server.socket_port': port, |
967 | 'tools.encode.on': True, | 997 | 'tools.encode.on': True, |
968 | 'tools.staticdir.on': True, | 998 | 'tools.staticdir.on': True, |
969 | - 'tools.encode.encoding': "utf-8" | 999 | + 'tools.encode.encoding': "utf-8", |
1000 | + 'server.thread_pool': 2, # single thread server. | ||
970 | }, | 1001 | }, |
971 | '/': { | 1002 | '/': { |
972 | 'tools.staticdir.dir': static_dir, | 1003 | 'tools.staticdir.dir': static_dir, |
-
请 注册 或 登录 后发表评论