请问python如何打出这些字符串?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问python如何打出这些字符串?相关的知识,希望对你有一定的参考价值。

    首先建立一个变量C,随便在变量C里面写入点内容,例如:c = "python编程基础练习"

    请点击输入图片描述

    利用for循环语句提取变量C当中的每个元素。具体代码如下:

    for l in c:

    print(l)

    运行后发现我们的字符串元素将会一个一个的打印出来

    请点击输入图片描述

    上面是for循环打印,下面我们利用while循环实现。代码如下:

    c = "python编程基础练习"

    s = 0

    while s < len(c):

    print(c[s])

    s = s+1

    请点击输入图片描述

参考技术A a = "123" 有双引号是字符串 str
b = 123 没有引号的数字是整数 int
c = 123.0 有小数点的叫浮点型 float
print(a, type(a)) 打印变量a,以及打印它的类型
参考技术B 在命令行输入python,然后进入python的交互界面
依次输入图片上的代码,用type测试变量类型就可以。
参考技术C 这些字符都是比较常见的,你直接就就可以写出来。

JVM源码系列:ThreadMXBean 打出堆栈信息原理分析

我们通常会使用工具jstack 去跟踪线程信息,其如何实现使用attach 的方式还是ptrace 的方式,这些可以去参考本人的博客的其他文章。

但这些方式都是外部使用的方式,如何直接使用java代码得到当前进程的线程的信息,方便监控jvm的整个运行状态,就不的不提到了ManagementFactory

通过调用方法

ThreadMXBean tmbean = ManagementFactory.getThreadMXBean(); 

通过得到 ThreadMXBean 可以得到非常多的thread信息,博客里也主要提到几个重要函数的实现

ThreadMXBean是个接口,主要实现都是在 ThreadImpl.java 里实现。

 

1. getThreadCount()

在虚拟机里会有ThreadService,里面会有些计数器用于记录总线程数,活着线程数目

 

  1. PerfCounter* ThreadService::_total_threads_count = NULL;
  2. PerfVariable* ThreadService::_live_threads_count = NULL;
  3. PerfVariable* ThreadService::_peak_threads_count = NULL;
  4. PerfVariable* ThreadService::_daemon_threads_count = NULL;
  5. volatile int ThreadService::_exiting_threads_count = 0;
  6. volatile int ThreadService::_exiting_daemon_threads_count = 0;


当线程创建,消亡都会调用 ThreadService 的方法来对计数器加减,这样就能直接得到线程数目的状态,而不需要去遍历线程链表。

 

 

2. getAllThreadIds()

这个实现也比较简单,直接扫描线程列表,就可以得到每个java 的线程id, 在扫描过程中使用了锁,锁住了线程链表。 但因为从native代码到java代码中没有锁结构,得到线程的列表只能表示当时的状态,当得到id的时候并不能保证该线程依然存活。

 

  1. ThreadsListEnumerator::ThreadsListEnumerator(Thread* cur_thread,
  2. bool include_jvmti_agent_threads,
  3. bool include_jni_attaching_threads) {
  4. assert(cur_thread == Thread::current(), "Check current thread");
  5. int init_size = ThreadService::get_live_thread_count();
  6. _threads_array = new GrowableArray<instanceHandle>(init_size);
  7. MutexLockerEx ml(Threads_lock);
  8. for (JavaThread* jt = Threads::first(); jt != NULL; jt = jt->next()) {
  9. // skips JavaThreads in the process of exiting
  10. // and also skips VM internal JavaThreads
  11. // Threads in _thread_new or _thread_new_trans state are included.
  12. // i.e. threads have been started but not yet running.
  13. if (jt->threadObj() == NULL ||
  14. jt->is_exiting() ||
  15. !java_lang_Thread::is_alive(jt->threadObj()) ||
  16. jt->is_hidden_from_external_view()) {
  17. continue;
  18. }
  19. // skip agent threads
  20. if (!include_jvmti_agent_threads && jt->is_jvmti_agent_thread()) {
  21. continue;
  22. }
  23. // skip jni threads in the process of attaching
  24. if (!include_jni_attaching_threads && jt->is_attaching()) {
  25. continue;
  26. }
  27. instanceHandle h(cur_thread, (instanceOop) jt->threadObj());
  28. _threads_array->append(h);
  29. }
  30. }


我们也可以看到 JNI attach 的线程,和jvmti agent的线程是不被统计在内的

 

 

3. ThreadInfo[] getThreadInfo 得到线程具体的堆栈信息

不论是传入要取的线程列表还是要取的所有的线程列表,最后都会看到将取堆栈信息的任务交给了vm thread 线程处理,关于vm thread的作用可以参考本人的其他博客。

 

  1. // Obtain thread dumps and thread snapshot information
  2. VM_ThreadDump op(dump_result,
  3. thread_handle_array,
  4. num_threads,
  5. max_depth, /* stack depth */
  6. with_locked_monitors,
  7. with_locked_synchronizers);
  8. VMThread::execute(&op);

 

 

 

 

 

a.  vm thread 去遍历所有线程的信息,由于是单线程处理,如果线程数量多的话是会影响到性能的,因为在扫描堆栈过程中,是在softpoint的状态。

b. ThreadDumpResult dump_result(num_threads); 使用ThreadDumpResult 去存储ThreadSnapshot 而保证不会被gc,因为从vm thread抓取线程结束,在填充threadinfo的时候还是会发生gc。

 

4. 锁的细节显示

在函数 dumpAllThreads(boolean lockedMonitors, boolean lockedSynchronizers)里有2个参数 lockedMonitor, 和 lockedSynchronizer

而这两个参数分别控制两种锁ThreadInfo .getLockedMonitors()  和 ThreadInfo.getLockedSynchronizers() 

a.  Monitor 锁 

就是我们传统使用的synchronized(Object obj),

可以通过MonitorInfo[]得到具体的锁的数量和信息

 

b. Locked ownable synchronizers 锁

常指的ReentrantLock 和 ReentrantReadWriteLock 锁

通过得到LockInfo[]  可以得到具体的类,锁的数量和信息

 

 

 

 

 

 

 

 



以上是关于请问python如何打出这些字符串?的主要内容,如果未能解决你的问题,请参考以下文章

请问如何在Excel中打出上划线?

这里的这些小符号怎么打出来 php 怎么去除 或者 替换掉 这些特殊字符?

如何打出& nbsp这个字符

protel99中如何打出带有上划线的特殊字符哪?

您好,请问在python3里我写了一个变量,应该如何把它插入print的输出语句

请问用js如何给字符串中加换行符?