当前位置:首页>python>澄迈乐学云信息:Python 线程,进程,多线程,多进程以及并行执行for循环

澄迈乐学云信息:Python 线程,进程,多线程,多进程以及并行执行for循环

  • 2026-02-28 01:16:12
澄迈乐学云信息:Python 线程,进程,多线程,多进程以及并行执行for循环

关注+星标,每天学习Python新技能

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

来源于网络,侵删

在 Python 中,我们可以使用多线程和多进程来实现并发执行的程序以提高效率。下面是对于 Python 中线程、进程、多线程和多进程的简要说明:

  • 线程(Thread)
    :线程是进程内部的执行路径,用于执行程序的一部分。Python 提供了 threading 模块来创建和管理线程。
  • 进程(Process)
    :进程是程序的执行实例,具有独立的资源和控制流程。可以使用 multiprocessing 模块在 Python 中创建和管理进程。
  • 多线程(Multithreading)
    :多线程是在单个进程内创建多个线程来同时执行任务的方式。多个线程共享进程的资源,但需要注意线程间的同步和资源竞争问题。
  • 多进程(Multiprocessing)
    :多进程是通过创建多个独立的进程来实现并发执行的方式。每个进程有自己独立的资源和控制流程,可以利用多核处理器并行执行任务。

使用多线程和多进程的选择取决于具体的场景和需求。多线程适合于 I/O 密集型任务,如网络请求、文件读写等,可以提高并发性和响应性。多进程适用于 CPU 密集型任务,如大量计算、图像处理等,可以利用多核处理器加速运算。

需要注意的是,在 Python 中全局解释器锁(Global Interpreter Lock,GIL)的限制下,多线程并不能实现真正的并行执行,而是通过在不同线程之间切换来达到并发效果。如果需要真正的并行执行,可以使用多进程来充分利用多核处理器。

要在 Python 中使用多线程和多进程,可以使用 threading 和 multiprocessing 模块,它们提供了相应的类和函数来创建和管理线程和进程,以及处理线程间的同步和通信。

GIL的作用:单一CPU工作,线程安全

二、Multiprocessing

Python 的 multiprocessing 模块提供了用于并行执行任务的多进程功能。它允许在 Python 中创建和管理多个独立的进程,每个进程有自己独立的资源和控制流程,可以同时执行任务以提高程序的性能和效率。

下面是对 multiprocessing 模块的详细说明:

  • 进程创建
    :multiprocessing 模块提供了 Process 类,可以使用它来创建进程。通过创建 Process 类的实例,可以指定要执行的函数或方法,并传递参数给它们。然后调用进程的 start() 方法来启动进程的执行。
函数名
功能
参数
返回值
Process
创建一个进程
target,args(元组)
进程对象
start
执行进程
join
阻塞程序
kill
杀死进程
is_alive
进程是否存活
bool
  • 进程间通信:由于每个进程拥有独立的地址空间,进程间的数据共享需要使用特定的进程间通信(IPC)机制。multiprocessing 模块提供了多种 IPC 的方式,如队列(Queue)、管道(Pipe)、共享内存(Value、Array)等,在不同进程之间安全地传递数据。

  • 进程池:通过使用 multiprocessing 模块的 Pool 类,可以创建进程池,实现对任务的批量处理。进程池中的多个进程可以并行执行任务,从而提高效率。

函数名
功能
参数
返回值
Pool
进程池创建
Processcount
进程池对象
apply_async
任务加入进程池(异步
func,args
join
等待进程池任务结束
close
关闭进程池
  • 锁和同步
    :多个进程同时访问共享资源时,可能会导致资源竞争和数据不一致的问题。为了避免这些问题,multiprocessing 模块提供了锁(Lock)、信号量(Semaphore)、条件变量(Condition)、事件(Event)等同步原语,用于实现进程间的同步和通信。
from multiprocessing import Process,Lockmanage = Manager()lock = manage.Lock()
函数名功能参数返回值
acquire上锁
release开锁(解锁)
  • 异常处理
    :在多进程执行时,各个进程都是相互独立运行的,因此可能会出现进程抛出异常的情况。multiprocessing 模块提供了异常处理机制,可以捕获和处理子进程抛出的异常。

总体而言,multiprocessing 模块提供了一种简单且方便的方式来实现多进程并行处理。它适用于处理 CPU 密集型任务、利用多核处理器的计算、并行执行独立的子任务等场景,可以充分发挥多核处理器的能力,提高程序的性能和效率。

import multiprocessing as muldeff(x):return x ** 2if __name__ == '__main__':    pool = mul.Pool(5)    rel = pool.map(f, [12345678910])    print(rel)

pool.close()pool.join()是用于管理multiprocessing模块中进程池的两个方法。

  • pool.close()
    方法用于关闭进程池,表示不再接受新的任务。之后如果尝试提交新的任务,将会引发错误。
  • pool.join()
    方法用于等待所有提交的任务执行完毕,即所有任务都被处理完成后再继续执行后续代码。这个方法会阻塞当前线程,直到所有任务都完成。

通常的使用方式是:先调用pool.close()方法告诉进程池不再接受新任务,然后调用pool.join()方法等待所有任务执行完毕。这样可以确保在主进程退出前,子进程都被正确地清理和终止。

进程示例

# coding:utf-8"""主进程与子进程互不影响"""import timeimport osimport multiprocessingdefwork_a():for i in range(10):        print(i, 'a', os.getpid())        time.sleep(1)defwork_b():for i in range(10):        print(i, 'b', os.getpid())        time.sleep(1)if __name__ == '__main__':    start = time.time() # 主进程1    a_p = multiprocessing.Process(target=work_a)  # 子进程1# a_p.start()  # 子进程1执行# a_p.join()    b_p = multiprocessing.Process(target=work_b)  # 子进程2# b_p.start()  # 子进程2执行for p in (a_p, b_p):        p.start()for p in (a_p, b_p):        p.join()for p in (a_p, b_p):        print(p.is_alive())    print('时间消耗是:', time.time() - start)  # 主进程代码2    print('parent pid is %s' % os.getpid())  # 主进程代码3行

进程池示例

# coding:utf-8import osimport timeimport multiprocessingdefwork(count, lock):    lock.acquire()    print(count, os.getpid())    time.sleep(5)    lock.release()return'result is %s, pid is %s' % (count, os.getpid())if __name__ == '__main__':    pool = multiprocessing.Pool(5)    manger = multiprocessing.Manager()    lock = manger.Lock()    results = []for i in range(20):        result = pool.apply_async(func=work, args=(i, lock))# results.append(result)# for res in results:#     print(res.get())    pool.close()    pool.join()

问题1.使用multiprocessing.Pool并行处理任务时,需要添加锁吗

在使用multiprocessing.Pool并行处理任务时,通常情况下不需要手动添加锁。

multiprocessing.Pool内部会自动处理进程间的并发访问问题,确保任务的并行执行不会导致数据竞争或冲突。

Pool会将任务分配给不同的进程,并确保每个进程独立地执行任务。每个进程都有自己的内存空间和执行环境,因此它们之间不会共享变量。

然而,如果你在任务内部使用了共享的可变数据结构(例如列表、字典)或共享的资源(例如文件、网络资源),那么你可能需要考虑使用进程锁(multiprocessing.Lock)或其他同步机制来保证数据访问的一致性和完整性。

在这种情况下,你可以在任务函数中使用锁来保护共享资源的读写操作,以避免数据竞争问题。如果你的任务没有使用共享的可变数据结构或资源,则通常情况下无需手动添加锁。

需要注意的是,进程锁的使用可能会对并行性能产生一定的影响,尤其是在高度竞争的情况下。因此,在使用锁时,需要权衡并行性能和数据一致性之间的需求。

问题2.multiprocessing.map用于for循环加速时,怎么加锁

import multiprocessingdefprocess_item(args):    print(multiprocessing.current_process().pid)    item, lock = args# 加锁with lock:        print(item)# 处理共享资源# ...defmain():# 创建一个进程池    pool = multiprocessing.Pool()# 创建一个Manager对象    manager = multiprocessing.Manager()# 创建一个可在多个进程之间共享的锁对象    lock = manager.Lock()# 要处理的数据    data = [123456]# 使用map进行并行处理    pool.map(process_item, [(item, lock) for item in data])# 关闭进程池    pool.close()    pool.join()if __name__ == '__main__':    main()

注意,加锁可能会导致性能下降,因为多个进程需要等待锁的释放才能继续执行。因此,在使用multiprocessing.map时,应该根据具体情况权衡使用锁的必要性和性能影响。

问题3.在使用Python的multiprocessing模块的map函数时必须在main中吗,为什么?

在使用Python的multiprocessing模块的map函数时,通常需要将其放在__main__函数或脚本的顶层代码中。这是因为multiprocessing模块在Windows和Unix-like系统上使用不同的方法来实现多进程,并且需要在__main__函数或脚本的顶层代码中启动新的进程。

具体原因是,在Unix-like系统中,multiprocessing模块会使用fork系统调用来创建子进程,它会复制当前进程的所有代码和状态。因此,当map函数在__main__函数或脚本的顶层代码中被调用时,map函数所依赖的代码也会被复制到新的子进程中

而在Windows系统中,由于没有fork系统调用multiprocessing模块会通过spawn方法来创建新的进程。在这种情况下,Python解释器会将整个脚本重新执行一次,并从__main__函数开始执行。因此,如果map函数不在__main__函数或脚本的顶层代码中调用,新的进程将无法找到所需的代码。

综上所述,为了确保在不同操作系统上multiprocessing.map的正确运行,它通常需要在__main__函数或脚本的顶层代码中被调用。

问题4.Python函数并行的基本实现方式

import multiprocessingdeffunc1():    print("Function 1")deffunc2():    print("Function 2")if __name__ == "__main__":# 创建两个进程    process1 = multiprocessing.Process(target=func1)    process2 = multiprocessing.Process(target=func2)# 启动进程    process1.start()    process2.start()# 等待进程结束    process1.join()    process2.join()

三、Multithreading

Thread创建线程Thread(target,args)
方法名说明用法
start
启动线程
start()
join
阻塞直到线程执行结束
join(timeout=None)
getName
获取线程的名字
getName()
setName
设置线程的名字
setName(name)
is_alive
判读线程是否存活
is_alive()
setDaemon
守护线程
setDaemon(True)

问题1.python for循环可以用多线程吗

在Python中,简单的for循环无法直接并发执行多线程。这是因为Python解释器的全局解释器锁(Global Interpreter Lock,GIL)限制了在解释器级别同时运行多个线程执行字节码的能力。

GIL是一种机制,确保在CPython解释器中同一时刻只有一个线程在执行Python字节码。这意味着即使在多线程环境下,同一进程中的多个线程也无法同时利用多个CPU核心。

然而,值得注意的是,尽管for循环本身不能直接并发执行多线程,但是可以使用其他模块(如threading模块)来在循环内部创建和管理多个线程,以实现并发执行的效果。

以下是一个示例代码,展示了如何在for循环中使用threading模块创建多个线程并发执行任务:

import threadingdefprocess_function(value):# 执行任务的代码    print(f"Processing value {value}")if __name__ == "__main__":    values = [12345]    threads = []for value in values:        thread = threading.Thread(target=process_function, args=(value,))        threads.append(thread)        thread.start()# 等待所有线程完成for thread in threads:        thread.join()    print("All threads completed")

在上述示例中,我们使用threading.Thread来创建多个线程,并将每个线程的目标函数设置为process_function。在循环结束后,我们启动每个线程,并使用join方法等待所有线程完成。

需要注意的是,由于GIL的存在,在多线程情况下,并不会提高CPU密集型任务的执行速度,因为同一时刻只有一个线程能够执行Python字节码。而对于I/O密集型任务,多线程可以在等待I/O的时候切换到其他线程,提高效率。

如果你希望充分利用多核/多CPU,实现并行处理,可以考虑使用multiprocessing模块来创建多个进程执行任务。

四、concurrent.futures

concurrent.futures是 Python 标准库中用于并发编程的模块。它提供了一种高级的接口,使得在编写并发代码时更加简单和直观concurrent.futures模块基于线程池和进程池的概念,允许在多个线程或进程中并发执行任务,并提供了一些方便的方法来管理并发任务的执行和获取结果。

下面是对concurrent.futures模块的一些关键概念和用法的详细说明:

  1. Executor接口concurrent.futures模块提供了Executor接口作为执行并发任务的抽象。它定义了一些常用的方法,如submit()map()shutdown()

    • submit(fn, *args, **kwargs)
      将函数fn以及其参数args和关键字参数kwargs提交给执行器,返回一个Future对象,代表函数的异步执行。
    • map(fn, *iterables, timeout=None)
      将函数fn应用于iterables中的每个元素,并返回一个可迭代的Future对象,每个Future对象代表一个函数的异步执行
    • shutdown(wait=True)
    • 关闭执行器,等待所有任务完成。如
    • wait参数为True(默认),则会阻塞直到所有任务完成。
  2. Future对象Future对象代表一个异步操作的结果。通过submit()map()方法返回的Future对象可以用于获取任务的结果和管理任务的状态。

    • result(timeout=None)
    • 等待并返回任务的结果。如果timeout参数指定了超时时间,超过该时间仍未完成则抛出TimeoutError异常。
    • add_done_callback(fn)
      :添加一个回调函数,在任务完成时被调用。
    • cancelled()
    • 返回任务是否被取消。
    • running()
      :返回任务是否正在运行
    • done()
      返回任务是否已经完成。
  3. 并发任务的执行方式:

    • 线程池执行器concurrent.futures.ThreadPoolExecutor类提供了线程池的实现,使用线程来执行并发任务。
    • 进程池执行器concurrent.futures.ProcessPoolExecutor类提供了进程池的实现,使用多个进程来执行并发任务。

下面是一个简单示例,演示了如何使用concurrent.futures模块创建线程池执行器并异步执行任务:

import concurrent.futuresdeftask(name):    print(f"Task {name} started")    result = name.upper()    print(f"Task {name} completed")return resultif __name__ == '__main__':with concurrent.futures.ThreadPoolExecutor() as executor:        futures = [executor.submit(task, i) for i in range(5)]for future in concurrent.futures.as_completed(futures):            result = future.result()            print(f"Result: {result}")

在上述示例中,我们定义了一个简单的任务函数task()它接受一个名称作为输入,并将其转换为大写。然后,我们使用ThreadPoolExecutor创建了一个线程池执行器,并使用submit()方法提交了五个任务。通过as_completed()函数,我们可以按照任务完成的顺序获取结果,并打印出每个任务的结果。

这只是concurrent.futures模块的基本用法介绍,它还提供了其他功能,如超时处理、并发映射、异常处理等。

五、joblib

joblib是一个用于高效地并行运行 Python 函数的库,特别适用于科学计算和机器学习任务。它提供了一种简单的方式来并行执行函数,自动处理函数的序列化和反序列化,并提供了内存缓存功能,以减少重复计算的开销。

下面是对joblib库的一些关键概念和用法的详细说明:

  • 并行执行函数joblib
    提供了Parallel类,用于并行执行函数。它可以通过多线程或多进程的方式实现并行计算。
from joblib import Parallel, delayed# 定义需要并行执行的函数defmy_function(x):return x ** 2# 并行执行函数results = Parallel(n_jobs=2)(delayed(my_function)(i) for i in range(10))

在上述示例中,我们定义了一个简单的函数my_function(),它接受一个参数并返回参数的平方。通过Parallel类,我们可以并行地执行my_function()函数,并得到一个包含计算结果的列表。

  • 内存缓存joblib
    提供了Memory类,用于在函数执行期间缓存中间结果,以减少重复计算的开销。
from joblib import Memory# 创建内存缓存对象mem = Memory("cachedir")# 定义需要缓存的函数@mem.cachedefmy_function(x):return x ** 2# 调用函数result = my_function(5)

在上述示例中,我们使用Memory类创建了一个内存缓存对象,指定缓存目录为 "cachedir"。通过装饰器@mem.cache,我们将my_function()函数包装成一个带有缓存功能的函数。在函数被调用时,如果输入参数已经被缓存,那么将直接返回缓存的结果,避免重复计算。

  • 其他功能
    joblib还提供了其他一些功能,如延迟计算、并行循环、内存映射等。你可以根据具体需求进一步探索和了解这些功能。

joblib库的优势在于它的简单易用性和高效性,特别适用于科学计算和机器学习中的大规模计算任务。它可以帮助提高代码的执行速度,并提供了一些方便的功能来处理函数的并行执行和结果的缓存,从而提升工作效率。

点击关注下方公众号,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等

点击关注-免费领取

推荐阅读

Python 异步调试神器:必须掌握的 3 个核心工具

Niquests: 最简单和先进的Python HTTP 客户端,完美替换Requests

告别内存崩溃!Python处理大文件的聪明方法

Robyn-基于Rust 运行时的超快速异步Python Web框架

点击 阅读原文

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-28 08:59:44 HTTP/2.0 GET : https://f.mffb.com.cn/a/477546.html
  2. 运行时间 : 0.234465s [ 吞吐率:4.27req/s ] 内存消耗:4,703.70kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=64686664abc687bff49cc144591b84ff
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001098s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001557s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000670s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000616s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001389s ]
  6. SELECT * FROM `set` [ RunTime:0.000544s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001454s ]
  8. SELECT * FROM `article` WHERE `id` = 477546 LIMIT 1 [ RunTime:0.012120s ]
  9. UPDATE `article` SET `lasttime` = 1772240384 WHERE `id` = 477546 [ RunTime:0.021344s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000579s ]
  11. SELECT * FROM `article` WHERE `id` < 477546 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001404s ]
  12. SELECT * FROM `article` WHERE `id` > 477546 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.004264s ]
  13. SELECT * FROM `article` WHERE `id` < 477546 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001804s ]
  14. SELECT * FROM `article` WHERE `id` < 477546 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003444s ]
  15. SELECT * FROM `article` WHERE `id` < 477546 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.022921s ]
0.238179s