久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

  • <small id='6yZMN'></small><noframes id='6yZMN'>

      • <bdo id='6yZMN'></bdo><ul id='6yZMN'></ul>

      1. <tfoot id='6yZMN'></tfoot>
        <i id='6yZMN'><tr id='6yZMN'><dt id='6yZMN'><q id='6yZMN'><span id='6yZMN'><b id='6yZMN'><form id='6yZMN'><ins id='6yZMN'></ins><ul id='6yZMN'></ul><sub id='6yZMN'></sub></form><legend id='6yZMN'></legend><bdo id='6yZMN'><pre id='6yZMN'><center id='6yZMN'></center></pre></bdo></b><th id='6yZMN'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='6yZMN'><tfoot id='6yZMN'></tfoot><dl id='6yZMN'><fieldset id='6yZMN'></fieldset></dl></div>
        <legend id='6yZMN'><style id='6yZMN'><dir id='6yZMN'><q id='6yZMN'></q></dir></style></legend>

        多處理 GUI 模式以對抗“無響應";阻塞

        multiprocessing GUI schemas to combat the quot;Not Respondingquot; blocking(多處理 GUI 模式以對抗“無響應;阻塞)
          <tbody id='A5z47'></tbody>

            <tfoot id='A5z47'></tfoot>

          1. <small id='A5z47'></small><noframes id='A5z47'>

          2. <legend id='A5z47'><style id='A5z47'><dir id='A5z47'><q id='A5z47'></q></dir></style></legend>

                <i id='A5z47'><tr id='A5z47'><dt id='A5z47'><q id='A5z47'><span id='A5z47'><b id='A5z47'><form id='A5z47'><ins id='A5z47'></ins><ul id='A5z47'></ul><sub id='A5z47'></sub></form><legend id='A5z47'></legend><bdo id='A5z47'><pre id='A5z47'><center id='A5z47'></center></pre></bdo></b><th id='A5z47'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='A5z47'><tfoot id='A5z47'></tfoot><dl id='A5z47'><fieldset id='A5z47'></fieldset></dl></div>
                • <bdo id='A5z47'></bdo><ul id='A5z47'></ul>
                  本文介紹了多處理 GUI 模式以對抗“無響應";阻塞的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                  問題描述

                  限時送ChatGPT賬號..

                  創建多處理/GUI 編碼系統的最佳方法是什么?

                  What are the best ways to create a multiprocessing/ GUI coding system?

                  我想為互聯網社區創建一個地方來查找有關如何在 python 中使用 multiprocessing 模塊的示例.

                  I would like to create a place for the internet community to come and find examples on how to use the multiprocessing module in python.

                  我在 Internet 上看到了幾個在主模塊中調用的簡單全局函數的 multiprocessing 進程的小示例,但我發現這很少能輕松轉化為任何人實際使用的任何東西關于 GUI.我認為許多程序將具有他們想要在單獨進程中使用的功能作為對象的方法(可能是其他對象的聚合等),并且可能單個 GUI 元素將具有需要調用它的關聯對象流程等

                  I have seen several small examples of multiprocessing processes on the internet of simple global functions which are called in a main module, but I have found that this rarely translates easily into anything that anyone actually does with regard to GUIs. I would think that many programs would have the functions which they want to use in a separate process as methods of objects (which may be aggregates of other objects etc.) and perhaps a single GUI element would have an associated object that needs to call this process, etc.

                  例如,我有一個相對復雜的程序,但在為它獲取響應式 GUI 時遇到問題,我認為這是由于我對 multiprocessing 和使用 的線程缺乏了解>QThread.但是,我知道下面給出的示例至少會以我想要的方式在進程之間傳遞信息(由于能夠執行 print 語句),但我的 GUI 仍然處于鎖定狀態.有誰知道這可能是什么原因造成的,如果我對多線程/多處理架構缺乏了解,這仍然是一個問題?

                  For example, I have a relatively complex program and I am having problems in getting a responsive GUI for it, which I believed to be due to my lack of understanding in multiprocessing and threading with QThread. However, I do know that the example given below will at least pass information between processes in the manner I desire (due to being able to execute print statements) but my GUI is still locking. Does anyone know what may be causing this, and if it is still a probelm with my lack of understanding in mutlithreaded/multiprocessing architectures?

                  這是我正在做的一個小的偽代碼示例:

                  Here is a small pseudo code example of what I am doing:

                  class Worker:
                      ...
                      def processing(self, queue):
                          # put stuff into queue in a loop
                  
                  # This thread gets data from Worker
                  class Worker_thread(QThread):
                      def __init__(self):
                          ...
                          # make process with Worker inside
                      def start_processing(self):
                          # continuously get data from Worker
                          # send data to Tab object with signals/slots
                  
                  class Tab(QTabWidget):
                      # spawn a thread separate from main GUI thread
                  
                      # update GUI using slot
                      def update_GUI()
                  

                  這段代碼是完全可編譯的示例,體現了我的程序的覆蓋結構:

                  And this code is fully compilable example which embodies the overlying sturcture of my program:

                  from PyQt4 import QtCore, QtGui
                  import multiprocessing as mp
                  import numpy as np
                  import sys
                  import time
                  
                  # This object can hold several properties which will be used for the processing
                  # and will be run in the background, while it updates a thread with all of it's progress
                  class Worker:
                      def __init__(self, some_var):
                          self.some_var = some_var
                          self.iteration = 0
                  
                      def some_complex_processing(self, queue):
                          for i in range(0,5000):
                              self.iteration += 1
                              queue.put(self.iteration)
                          queue.put('done with processing')
                  
                  # This Woker_thread is a thread which will spawn a separate process (Worker).
                  # This separate is needed in order to separate the data retrieval
                  # from the main GUI thread, which should only quickly update when needed 
                  class Worker_thread(QtCore.QThread):
                      # signals and slots are used to communicate back to the main GUI thread
                      update_signal = QtCore.pyqtSignal(int)
                      done_signal = QtCore.pyqtSignal()
                  
                      def __init__(self, parent, worker):
                          QtCore.QThread.__init__(self, parent)
                          self.queue = mp.Queue()
                          self.worker = worker
                          self.parent = parent
                          self.process = mp.Process(target=self.worker.some_complex_processing, args=(self.queue,))
                  
                      # When the process button is pressed, this function will start getting data from Worker
                      # this data is then retrieved by the queue and pushed through a signal
                      # to Tab.update_GUI
                      @QtCore.pyqtSlot()
                      def start_computation(self):
                          self.process.start()
                          while(True):
                              try:
                                  message = self.queue.get()
                                  self.update_signal.emit(message)
                              except EOFError:
                                  pass
                              if message == 'done with processing':
                                  self.done_signal.emit()
                                  break
                              #self.parent.update_GUI(message)
                          self.process.join()
                          return
                  
                  # Each tab will start it's own thread, which will spawn a process
                  class Tab(QtGui.QTabWidget):
                      start_comp = QtCore.pyqtSignal()
                      def __init__(self, parent, this_worker):
                          self.parent = parent
                          self.this_worker = this_worker
                          QtGui.QTabWidget.__init__(self, parent)
                  
                          self.treeWidget = QtGui.QTreeWidget(self)
                          self.properties = QtGui.QTreeWidgetItem(self.treeWidget, ["Properties"])
                          self.step = QtGui.QTreeWidgetItem(self.properties, ["Iteration #"])
                  
                          self.thread = Worker_thread(parent=self, worker=self.this_worker)
                          self.thread.update_signal.connect(self.update_GUI)
                          self.thread.done_signal.connect(self.thread.quit)
                          self.start_comp.connect(self.thread.start_computation)
                          self.thread.start()
                  
                      ###############################
                      # Here is what should update the GUI at every iteration of Worker.some_complex_processing()
                      # The message appears to be getting sent, due to seeing the print statement in the console, but the GUI is not updated.
                      @QtCore.pyqtSlot(int)
                      def update_GUI(self, iteration):
                          self.step.setText(0, str(iteration))
                          #time.sleep(0.1)
                          print iteration
                  
                      def start_signal_emit(self):
                          self.start_comp.emit()
                  
                  # GUI stuff
                  class MainWindow(QtGui.QMainWindow):
                      def __init__(self, parent = None):
                          QtGui.QMainWindow.__init__(self)
                          self.tab_list = []
                          self.setTabShape(QtGui.QTabWidget.Rounded)
                          self.centralwidget = QtGui.QWidget(self)
                          self.top_level_layout = QtGui.QGridLayout(self.centralwidget)
                  
                          self.tabWidget = QtGui.QTabWidget(self.centralwidget)
                          self.top_level_layout.addWidget(self.tabWidget, 1, 0, 25, 25)
                  
                          process_button = QtGui.QPushButton("Process")
                          self.top_level_layout.addWidget(process_button, 0, 1)
                          QtCore.QObject.connect(process_button, QtCore.SIGNAL("clicked()"), self.process)
                  
                          self.setCentralWidget(self.centralwidget)
                          self.centralwidget.setLayout(self.top_level_layout)
                  
                          # Make Tabs in loop from button
                          for i in range(0,10):
                              name = 'tab' + str(i)
                              self.tab_list.append(Tab(self.tabWidget, Worker(name)))
                              self.tabWidget.addTab(self.tab_list[-1], name)
                  
                      # Do the processing
                      def process(self):
                          for tab in self.tab_list:
                              tab.start_signal_emit()
                          return
                  
                  if __name__ == "__main__":
                      app = QtGui.QApplication([])
                      win = MainWindow()
                      win.show()
                      sys.exit(app.exec_())
                  

                  更多信息:我正在編寫一個程序,我想從中產生幾個進程,并讓它們在整個處理過程中不斷顯示它們的進度.我希望程序是多處理的,以便盡可能地從程序中獲得最佳速度.

                  More Information: I am writing a program which I would like to spawn several processes from and have them continuously show their progress throughout their processing. I would like the program to be multiprocessed in order to get the best speed out of the program as possible.

                  目前,我正在嘗試使用線程來生成進程并使用信號和插槽來更新 GUI,同時隊列不斷檢索數據.使用 print 語句時,queues、signalsslots 似乎可以工作,但無法更新 GUI.如果有人對我應該如何構建它以使程序更易于管理有任何其他建議,我想學習.

                  At the moment, I am trying to use a thread to spawn a process and use signals and slots to update the GUI while the data is continuously retrieved by a queue. It appears that the queues, signals, and slots work when using print statements, but can not update the GUI. If anyone has any other suggestions as to how I should structure this in order to keep the program more managable, I would like to learn.

                  編輯:我已經做了 Min Lin 提出的調整,除了使 Worker 成為 QObject 以便 moveToThread() 工作.
                  這是我目前擁有的新代碼:

                  EDIT: I have made the adjustments put forth by Min Lin, with the addition of making Worker a QObject so that moveToThread() would work.
                  Here is the new code I have at the moment:

                  from PyQt4 import QtCore, QtGui
                  import multiprocessing as mp
                  import numpy as np
                  import sys
                  import time
                  
                  class Worker(QtCore.QObject):
                      update_signal = QtCore.pyqtSignal(int)
                      done_signal = QtCore.pyqtSignal()
                  
                      def __init__(self, some_var):
                          QtCore.QObject.__init__(self, parent=None)
                          self.some_var = some_var
                          self.iteration = 0
                          self.queue = mp.Queue()
                          self.process = mp.Process(target=self.some_complex_processing, args=(self.queue,))
                  
                      def some_complex_processing(self, queue):
                          for i in range(0,5000):
                              self.iteration += 1
                              queue.put(self.iteration)
                          queue.put('done with processing')
                  
                      @QtCore.pyqtSlot()
                      def start_computation(self):
                          self.process.start()
                          while(True):
                              try:
                                  message = self.queue.get()
                                  self.update_signal.emit(message)
                              except EOFError:
                                  pass
                              if message == 'done with processing':
                                  self.done_signal.emit()
                                  break
                          self.process.join()
                          return
                  
                  
                  
                  class Tab(QtGui.QTabWidget):
                      start_comp = QtCore.pyqtSignal()
                      def __init__(self, parent, this_worker):
                          self.parent = parent
                          self.this_worker = this_worker
                          QtGui.QTabWidget.__init__(self, parent)
                  
                          self.treeWidget = QtGui.QTreeWidget(self)
                          self.properties = QtGui.QTreeWidgetItem(self.treeWidget, ["Properties"])
                          self.step = QtGui.QTreeWidgetItem(self.properties, ["Iteration #"])
                  
                          # Use QThread is enough
                          self.thread = QtCore.QThread();
                          # Change the thread affinity of worker to self.thread.
                          self.this_worker.moveToThread(self.thread);
                          self.this_worker.update_signal.connect(self.update_GUI)
                          self.this_worker.done_signal.connect(self.thread.quit)
                          self.start_comp.connect(self.this_worker.start_computation)
                          self.thread.start()
                  
                      ###############################
                      # Here is what should update the GUI at every iteration of Worker.some_complex_processing()
                      # The message appears to be getting sent, due to seeing the print statement in the console, but the GUI is not updated.
                      @QtCore.pyqtSlot(int)
                      def update_GUI(self, iteration):
                          self.step.setText(0, str(iteration))
                          #time.sleep(0.1)
                          print iteration
                  
                      def start_signal_emit(self):
                          self.start_comp.emit()
                  
                  # GUI stuff
                  class MainWindow(QtGui.QMainWindow):
                      def __init__(self, parent = None):
                          QtGui.QMainWindow.__init__(self)
                          self.tab_list = []
                          self.setTabShape(QtGui.QTabWidget.Rounded)
                          self.centralwidget = QtGui.QWidget(self)
                          self.top_level_layout = QtGui.QGridLayout(self.centralwidget)
                  
                          self.tabWidget = QtGui.QTabWidget(self.centralwidget)
                          self.top_level_layout.addWidget(self.tabWidget, 1, 0, 25, 25)
                  
                          process_button = QtGui.QPushButton("Process")
                          self.top_level_layout.addWidget(process_button, 0, 1)
                          QtCore.QObject.connect(process_button, QtCore.SIGNAL("clicked()"), self.process)
                  
                          self.setCentralWidget(self.centralwidget)
                          self.centralwidget.setLayout(self.top_level_layout)
                  
                          # Make Tabs in loop from button
                          for i in range(0,10):
                              name = 'tab' + str(i)
                              self.tab_list.append(Tab(self.tabWidget, Worker(name)))
                              self.tabWidget.addTab(self.tab_list[-1], name)
                  
                      # Do the processing
                      def process(self):
                          for tab in self.tab_list:
                              tab.start_signal_emit()
                          return
                  
                  if __name__ == "__main__":
                      app = QtGui.QApplication([])
                      win = MainWindow()
                      win.show()
                      sys.exit(app.exec_())
                  

                  感謝您的所有回答,我很欣賞每個人在描述他們認為是解決方案的想法時所采用的詳細程度,但不幸的是,我還沒有能夠執行在在 GUI 上顯示對象的屬性時它們所屬的對象.
                  但是,我從這篇文章中學到了很多東西,這讓我意識到我目前擁有的線程版本正在掛起 GUI,因為 GUI 更新功能太大并且需要太多處理.

                  Thank you for all of the answers, I appreciate the level of detail that everyone has gone into in describing the idea they believe to be solution, but unfortunately I have not yet been able to perform these types of processes which operate on the object they belong to while displaying the object's attribute on a GUI.
                  However, I have learned a decent amount from this post, which allowed me to realize that the threaded version I have at the moment is hanging the GUI since the GUI update function is too large and takes too much processing.

                  所以,我在我的多線程版本中采用了 QTimer() 方法,它的性能要好得多!我會建議任何面臨類似問題的人至少嘗試類似的事情.

                  So, I have taken the QTimer() approach to my multi-threaded version and it is performing much better! I would advise anyone facing similar problems to at least attempt something similar to this.

                  我不知道這種解決 GUI 更新問題的方法,現在它是對我所面臨問題的偽或臨時修復.

                  I was unaware of this approach to solving GUI update problems, and it is now a pseudo or temporary fix to the problem I am facing.

                  推薦答案

                  GUI 應用程序非常適合測試東西,因為它很容易生成新任務并可視化正在發生的事情,所以我寫了一個小示例應用程序(屏幕截圖,代碼如下)因為我確實想自己學習.

                  A GUI application is perfect for testing stuff, as it is easy to spawn new tasks and visualize what is going on, so I wrote a little example app (Screenshot, code is below) as I did want to learn it for my self.

                  起初,我采取了與您類似的方法,嘗試實現消費者/生產者模式,我在后臺進程中苦苦掙扎,執行無限循環以等待新工作,并為自己負責來回通信.然后我發現了 Pool 接口,然后我可以用幾行代碼替換所有那些可怕的代碼.您只需要一個池和幾個回調:

                  At first, i took a similar approach as yours, trying to implement the Consumer/Producer pattern and I struggeled with Background Processes doing endless loops to wait for new jobs and took care of communication back and forth for myself. Then I found out about the Pool Interface and then I could replace all that hidious code with just a few lines. All you need is a single pool and a few callbacks:

                  #!/usr/bin/env python3
                  import multiprocessing, time, random, sys
                  from PySide.QtCore import * # equivalent: from PyQt4.QtCore import *
                  from PySide.QtGui import *   # equivalent: from PyQt4.QtGui import *
                  
                  def compute(num):
                      print("worker() started at %d" % num)
                      random_number = random.randint(1, 6)
                      if random_number in (2, 4, 6):
                          raise Exception('Random Exception in _%d' % num)
                      time.sleep(random_number)
                      return num
                  
                  class MainWindow(QMainWindow):
                      def __init__(self):
                          QMainWindow.__init__(self)
                          self.toolBar = self.addToolBar("Toolbar")
                          self.toolBar.addAction(QAction('Add Task', self, triggered=self.addTask))
                          self.list = QListWidget()
                          self.setCentralWidget(self.list)
                  
                          # Pool of Background Processes
                          self.pool = multiprocessing.Pool(processes=4)
                  
                      def addTask(self):
                          num_row = self.list.count()
                          self.pool.apply_async(func=compute, args=(num_row,), callback=self.receiveResult,
                                                error_callback=self.receiveException)
                          item = QListWidgetItem("item %d" % num_row)
                          item.setForeground(Qt.gray)
                          self.list.addItem(item)
                  
                      def receiveResult(self, result):
                          assert isinstance(result, int)
                          print("end_work(), where result is %s" % result)
                          self.list.item(result).setForeground(Qt.darkGreen)
                  
                      def receiveException(self, exception):
                          error = str(exception)
                          _pos = error.find('_') + 1
                          num_row = int(error[_pos:])
                          item = self.list.item(num_row)
                          item.setForeground(Qt.darkRed)
                          item.setText(item.text() + ' Retry...')
                          self.pool.apply_async(func=compute, args=(num_row,), callback=self.receiveResult,
                                                error_callback=self.receiveException)
                  
                  if __name__ == '__main__':
                      app = QApplication(sys.argv)
                      main_window = MainWindow()
                      main_window.show()
                      sys.exit(app.exec_())
                  

                  我做了另一個例子,使用 QTimer 而不是回調,定期檢查隊列中的條目,更新 QProgressBar:

                  I did another example using a QTimer instead of Callbacks, checking periodically for Entries in a Queue, updating a QProgressBar:

                  #!/usr/bin/env python3
                  import multiprocessing, multiprocessing.pool, time, random, sys
                  from PySide.QtCore import *
                  from PySide.QtGui import *
                  
                  def compute(num_row):
                      print("worker started at %d" % num_row)
                      random_number = random.randint(1, 10)
                      for second in range(random_number):
                          progress = float(second) / float(random_number) * 100
                          compute.queue.put((num_row, progress,))
                          time.sleep(1)
                      compute.queue.put((num_row, 100))
                  
                  def pool_init(queue):
                      # see http://stackoverflow.com/a/3843313/852994
                      compute.queue = queue
                  
                  class MainWindow(QMainWindow):
                      def __init__(self):
                          QMainWindow.__init__(self)
                          self.toolBar = self.addToolBar("Toolbar")
                          self.toolBar.addAction(QAction('Add Task', self, triggered=self.addTask))
                          self.table = QTableWidget()
                          self.table.verticalHeader().hide()
                          self.table.setColumnCount(2)
                          self.setCentralWidget(self.table)
                  
                          # Pool of Background Processes
                          self.queue = multiprocessing.Queue()
                          self.pool = multiprocessing.Pool(processes=4, initializer=pool_init, initargs=(self.queue,))
                  
                          # Check for progress periodically
                          self.timer = QTimer()
                          self.timer.timeout.connect(self.updateProgress)
                          self.timer.start(2000)
                  
                      def addTask(self):
                          num_row = self.table.rowCount()
                          self.pool.apply_async(func=compute, args=(num_row,))
                          label = QLabel("Queued")
                          bar = QProgressBar()
                          bar.setValue(0)
                          self.table.setRowCount(num_row + 1)
                          self.table.setCellWidget(num_row, 0, label)
                          self.table.setCellWidget(num_row, 1, bar)
                  
                      def updateProgress(self):
                          if self.queue.empty(): return
                          num_row, progress = self.queue.get() # unpack
                          print("received progress of %s at %s" % (progress, num_row))
                          label = self.table.cellWidget(num_row, 0)
                          bar = self.table.cellWidget(num_row, 1)
                          bar.setValue(progress)
                          if progress == 100:
                              label.setText('Finished')
                          elif label.text() == 'Queued':
                              label.setText('Downloading')
                          self.updateProgress() # recursion
                  
                  if __name__ == '__main__':
                      app = QApplication(sys.argv)
                      main_window = MainWindow()
                      main_window.show()
                      sys.exit(app.exec_())
                  

                  這篇關于多處理 GUI 模式以對抗“無響應";阻塞的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                  【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                  相關文檔推薦

                  What exactly is Python multiprocessing Module#39;s .join() Method Doing?(Python 多處理模塊的 .join() 方法到底在做什么?)
                  Passing multiple parameters to pool.map() function in Python(在 Python 中將多個參數傳遞給 pool.map() 函數)
                  multiprocessing.pool.MaybeEncodingError: #39;TypeError(quot;cannot serialize #39;_io.BufferedReader#39; objectquot;,)#39;(multiprocessing.pool.MaybeEncodingError: TypeError(cannot serialize _io.BufferedReader object,)) - IT屋-程序員軟件開
                  Python Multiprocess Pool. How to exit the script when one of the worker process determines no more work needs to be done?(Python 多進程池.當其中一個工作進程確定不再需要完成工作時,如何退出腳本?) - IT屋-程序員
                  How do you pass a Queue reference to a function managed by pool.map_async()?(如何將隊列引用傳遞給 pool.map_async() 管理的函數?)
                  yet another confusion with multiprocessing error, #39;module#39; object has no attribute #39;f#39;(與多處理錯誤的另一個混淆,“模塊對象沒有屬性“f)

                  <small id='UyXkW'></small><noframes id='UyXkW'>

                      • <legend id='UyXkW'><style id='UyXkW'><dir id='UyXkW'><q id='UyXkW'></q></dir></style></legend>

                          <bdo id='UyXkW'></bdo><ul id='UyXkW'></ul>
                          <i id='UyXkW'><tr id='UyXkW'><dt id='UyXkW'><q id='UyXkW'><span id='UyXkW'><b id='UyXkW'><form id='UyXkW'><ins id='UyXkW'></ins><ul id='UyXkW'></ul><sub id='UyXkW'></sub></form><legend id='UyXkW'></legend><bdo id='UyXkW'><pre id='UyXkW'><center id='UyXkW'></center></pre></bdo></b><th id='UyXkW'></th></span></q></dt></tr></i><div class="qwawimqqmiuu" id='UyXkW'><tfoot id='UyXkW'></tfoot><dl id='UyXkW'><fieldset id='UyXkW'></fieldset></dl></div>
                            <tbody id='UyXkW'></tbody>
                          • <tfoot id='UyXkW'></tfoot>
                            主站蜘蛛池模板: 亚洲欧美激情网 | 日韩午夜在线播放 | 一级黄色片免费 | 色视频www在线播放国产人成 | 免费精品一区 | 久久99精品久久久久久噜噜 | 中文字幕高清免费日韩视频在线 | 少妇性l交大片免费一 | 久久精品超碰 | 欧美一区二区三区在线播放 | 日韩一区二区在线视频 | 中文字幕成人在线 | 色一情一乱一伦一区二区三区 | 中文字幕日韩三级 | 日韩精品一区二区三区中文字幕 | 欧美成人精品一区二区男人看 | 久久免费精品 | 精品欧美| 蜜桃在线播放 | 草草网| 久久久免费 | 综合网伊人 | 国产欧美日韩在线观看 | 欧美二区在线 | 国产a视频 | 久久久视频在线 | 国产日韩一区二区三区 | 国产一区二区三区视频免费观看 | 亚洲精品乱码久久久久久黑人 | www.一级片 | 九九热九九 | 91污在线| 久草热线| 美女视频黄的免费 | 亚洲国产精品成人综合久久久 | 尤物在线视频 | 国产成人精品一区二 | 99热.com | 中文字幕在线三区 | 亚洲国产精品一区 | 日韩a在线|